저는 각각 하나가 문서 ID와 관련되어있는 엄청난 양의 정수 쌍을 가지고 있습니다. 내 목표는 이제 같은 쌍을 가진 문서를 검색하는 것입니다.메모리 효율적인 맵 <pair <int,int>, 세트 <int>> 대체
Document1
- pair1: (3, 9)
- pair2: (5,13)
Document2
- pair1: (4234, 13)
- pair2: (5,13)
map<pair<int,int>, unordered_set<int>> hashMap
hashMap[{3, 9}].insert(1)
hashMap[{5, 13}].insert(1)
hashMap[{4234, 13}].insert(2)
hashMap[{5, 13}].insert(2)
하는 것이 될 것입니다 :
내 첫번째 생각은 예를 들어, 즉 map<pair<int,int>, unordered_set<int>>
, 관련된 값으로 키와 쌍 값과 문서 ID를 사용하여 해시 맵 (std::map
)를 사용하는 것이 었습니다 에
Key(3,9) = Documents(1)
Key(5,13) = Documents(1,2)
Key(4234,13) = Documents(2)
내 문제는 이제 내 사용 가능한 24GB RAM을 초과하는 엄청난 양의 메모리가 필요하다는 것입니다. 따라서 삽입물과 조회에 좋은 성능을 제공하는 대안이 필요합니다. 이론적으로 저는 오버 헤드 비용이 고려되지 않을 때 1500 Million * 3 (PairVal1, PairVal2, Document-ID) * 4 (bytes per Integer) = 18GB
을 사용하고 있습니다. 그래서 내 문제에 대한 좋은 대안이 있습니까?
std :: map은 해시지도가 아닙니다. std :: unordered_map을 사용할 수도 있습니다. –
효율성에 대해서는 말할 수는 없지만 stxxl에서 이러한 유형의 문제를 살펴볼 수 있습니다. http : // stxxl.sourceforge.net/ – Dan
'set'의 문서 수가 적 으면'std :: vector'로 대체 할 수 있습니다 – Galik