두 구현에서 컨테이너에는 node_type
의 원시 배열이 저장되며 기본적으로 유형이 T
인 단순 연결 목록입니다.EASTL 및 SGI Hashtable 구현
// From SGI
template <class _Val>
struct _Hashtable_node
{
_Hashtable_node* _M_next;
_Val _M_val;
};
나는 교육 이유로 내 자신의 버전을 구현하고 그들이 버킷에 대한 std::list<>
컨테이너를 사용하지 않는 이유 궁금? std::list<>
에 이미 존재하는 코드를 작성하는 이유는 무엇입니까?
나는 이것을 발견 한 이유 중 하나가 std::list<>
이 이중으로 연결되어있어 낭비되는 부분이 있다는 것입니다. 하지만 하나의 링크 된 목록을 사용한다면 어떨까요? 왜 bucket_type
템플릿 매개 변수를 변경하지 않아도됩니까?
전적으로 구현에 맞습니까? 이렇게하면 라이브러리 구성 요소를 가능한 한 독립적으로 유지할 수 있습니다. 전체'list' 인터페이스가 필요 없기 때문에 몇 가지 필수 목록 작업을 정의하는 것이 훨씬 편합니다. –
@KerrekSB : 같은 양의 공간을 사용하면 (단일 연결 목록 또는'std :: array'가 사용된다고 가정하면) 어떻게 더 희박합니까? 실제로 코드 재사용에 대해 우리가 일반적으로 배우는 것에 반하는 것이 아닙니까? 언급 된 구현은 목록 클래스의 일부를 다시 작성했는데 특히'list <> '가 바뀌면 길을 더 빨리 그리고 더 잘 수행 할 수 있고'hashtable'는 도움이되지 않는다 그것에서. – Samaursa
번역 단위에서 해시 테이블 클래스 만 사용하는 경우 다른 컨테이너 헤더 전체를 가져 오는 것보다 코드를 적게 컴파일해야한다는 점에서 더 편합니다. EASTL을 위해 할당 자 사용을 라이브러리 관리자에게 더 투명하게 만들 것이라고 가정합니다. –