2011-09-04 5 views
0

세 개의 int로 액세스 할 고유 요소의 컨테이너가 필요하며 각 int는 1.000.000.000 이상일 수 있습니다.부스트 :: Multiindex 대 문자열 인덱스 부스트 :: unordered_map

(실제로는 이러한 요소 중 일부만 채워지며 실제로는 boost :: unordered_map 자체입니다).

부스트와 같은 멀티 인덱스 배열을 갖는 것이 더 빠릅니까 :: multiindex (아니면 내가 모르는 뭔가) 또는 키로 구성된 문자열을 사용하는 부스트 :: unordered_map?

답변

2

다중 인덱스가 원하는 것이 아니므로 유형이 트리플 인 단일 인덱스가 필요합니다. (실제로 3 개의 독립적 인 색인을 원한다면, 오해하는 경우 의견을 남기십시오.)

문자열, 하늘 번호를 사용하지 마십시오. 그냥 키로 트리플을 사용 : 당신이 std::map<key_type, T>를 사용하는 경우

typedef std::tuple<int, int, int> key_type; 

, 당신은 로그 조회를 얻을 충분하다, 나는 당신도 사전 편찬 있는지 확실하지 않습니다 더 이상 일을 (할 필요가 없습니다 생각 비교는 튜플의 경우 기본적으로 정의됩니다).

std::unordered_map<key_type, T> (또는 부스트 버전)을 사용하려면 해시 기능을 정의해야합니다. Boost에는 이미 하나의 튜플이 있지만, C++ 11은 그렇지 않습니다. 부스트 코드에서자를 수있는 hash_combine()을 기반으로 구현하는 것은 매우 쉽습니다.

+0

std :: tuple이 내가 필요한 것입니다. 감사합니다. 나는 그것에 대해 몰랐습니다. – St0rM

+0

'std :: tuple'은 당신이 전달하는 모든 타입이있는 한 사전 식'연산자 <'내장형을 가지고 있다고 생각합니다. –

+0

@Matthieu : 건배, 잘 알고 있습니다. StorM : 튜플을 가지고 있지 않다면 (''또는 ''이 없다면 ''을 확인하십시오.), 직접 만들거나 pair , int>를 사용하십시오. ... –