문제

문자열을 통해 특정 객체를 색인화하는 동시에 삽입 순서도 유지하는 연관 컨테이너가 필요합니다. 따라서 특정 객체를 이름으로 찾거나 반복하고 삽입한 순서대로 객체를 검색할 수 있습니다. 그들을.

나는 이것을 생각 해요 연결리스트와 해시맵의 혼합 작업을 수행해야 하지만 사용을 시도하기 전에 std::tr1::unordered_map 내가 설명한 방식으로 작동한다고 생각했지만 그렇지 않았습니다.누군가 나에게 다음의 의미와 동작을 설명해 줄 수 있습니까? unordered_map?


@웨스크:나는 std::map이 STL에 의해 구현되었다고 확신하지만 std::hash_map은 STL에 없다고 확신합니다(이전 버전의 Visual Studio에서는 stdext라는 네임스페이스에 넣은 것 같습니다).

@크리스토퍼:따라서 내가 올바르게 이해한다면 차이점은 외부에서 작동하는 방식이 아니라 구현(따라서 성능)에 있습니다.

도움이 되었습니까?

해결책

정렬되지 않은 컨테이너의 문서화 강화

차이점은 조회를 생성하는 방법에 있습니다.

맵/세트 컨테이너에서는 operator< 정렬된 트리를 생성하는 데 사용됩니다.

정렬되지 않은 컨테이너에는 operator( key ) => index 사용.

작동 방식에 대한 설명은 해싱을 참조하세요.

다른 팁

Boost::MultiIndex가 만들어진 표준적인 이유를 질문하셨습니다.키별 빠른 조회로 삽입 순서를 나열합니다. Boost MultiIndex 튜토리얼:목록 빠른 조회

다음 두 가지 방법으로 연관 컨테이너를 색인화해야 합니다.

  • 게재 신청서
  • 문자열 비교

노력하다 부스트.멀티인덱스 또는 Boost.Intrusive.이런 식으로 사용하지는 않았지만 가능하다고 생각합니다.

죄송합니다. 마지막 댓글을 잘못 읽었습니다.예, hash_map은 STL에 없고 map은 있습니다.하지만 unordered_map과 hash_map은 내가 읽은 것과 동일합니다.

맵 -> 로그(n) 삽입, 검색, 반복이 효율적입니다(키 비교에 따라 정렬됨)

hash_map/unordered_map -> 상수 시간 삽입 및 검색, 반복 시간이 효율적이라고 보장되지 않음

맵은 삽입 시퀀스가 ​​아닌 키 콘텐츠를 기준으로 순서를 지정하므로(키에 삽입 시퀀스에 대한 정보가 포함되어 있지 않은 경우) 이들 중 어느 것도 스스로 작동하지 않습니다.

설명한 대로(list + hash_map) 수행하거나 삽입 시퀀스 번호와 적절한 비교 함수가 있는 키 유형을 만들어야 합니다.

생각하다 unordered_map과 hash_map은 거의 동일합니다.차이점은 STL에는 공식적으로 hash_map이 없다는 것입니다(사용 중인 것은 아마도 컴파일러에 특정한 것일 수 있습니다). 따라서 unordered_map이 해당 누락에 대한 수정 사항입니다.

unordered_map이 바로 그거예요...정렬되지 않은.반복 시 순서를 유지하는 것에 의존할 수는 없습니다.

std::hash_map이 다음 위치에 있는지 확인하세요. 모두 STL 구현?SGI STL은 이를 구현하지만 GNU g++에는 어쨌든 4.3.1부터 이 기능이 없습니다(__gnu_cxx 네임스페이스에 있음).내가 아는 한 hash_map은 항상 비표준이었으며 이제 tr1이 이를 수정하고 있습니다.

@웨스크:STL에는 std::map...이 있습니다.그럼 unordered_map과의 차이점은 무엇입니까?나는 STL이 동일한 것을 두 번 구현하고 다르게 호출할 것이라고 생각하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top