2017-12-17 20 views
0

늘어나는만큼 내가 부스트 : unordered_map 및 표준 : : unordered_map 이해 "오버플로"(일명 같은 키로 삽입 얻을 여러 가지)의 측면에서 동일합니다. 그들은 "양동이"에 그것을 저장하므로 당신은 그 위에 반복 할 수 있습니다. 예를 들어캔트 unorderd지도에서 오버플로를 통해 interate

:

key: data: 
"apple" 2 
"peach" 4 
"apple" 3 
"peach" 8 

는 "사과"에 대한 버킷 오른쪽 2 & 3를 포함 할 것인가?

글쎄,이 문제를 해결하는 데 어려움을 겪고 있습니다.

#define ANZ 10 
typedef boost::unordered_map<uint16_t, int> uuidMap_int; 


using namespace std; 

int main() 
{ 
    uuidMap_int uuidMap; 
    boost::uuids::uuid entity1; 
    boost::uuids::uuid entity2; 

    for(unsigned int i = 0;i<ANZ;i++) 
     uuidMap.insert(std::pair<int,int>((i<5?0:1),i)); 

    for(unsigned int i = 0;i < uuidMap.bucket_count();i++){ 
     for(uuidMap_int::local_iterator it = uuidMap.begin(i); it != uuidMap.end(i);++it){ 
      std::cout<<it->first<<"|"<<it->second<<"\n"; 
     } 
    } 
    return 0; 
} 

는 않는 모든지도하고 충전에 2 개 새 항목을 만들 수 있습니다 :

여기 내 코드입니다. 여기 는 출력이처럼 보이도록되어있는 것이다 :

0|0 
0|1 
0|2 
. 
. 
. 
1|5 
1|6 
. 
. 
. 
1|10 

그러나 실제로 지금은 이런 일이 왜 잘 모릅니다이

0|0 
1|5 

것 같습니다. "오버플로"가 단순히 휴지통처럼 보이는 것처럼 보입니다. 그러나 sth simmilar 작은 데이터베이스를 만들려고, 그래서 ID 및 이와 같은지도에 ID를 말했다 속한 데이터 무리가 있어야합니다.

내가 잘못하고있는 것/다른지도를 사용하면 내가 원하는 방식으로 작업 할 수 있습니까?

+2

이해가 잘못되었습니다. 그 외에는 잘못된 행동을하지 않습니다. – juanchopanza

+0

@juanchopanza 내가 잘못한 곳을 설명하거나 여기에 매달 리도록 내버려 두시겠습니까? – MoustacheSpy

+1

어쩌면 이것을 읽었을 것입니다 : http://en.cppreference.com/w/cpp/container/unordered_map. 'unordered_map'은 키 - 값 쌍을 가지고 있습니다. 아마도 필요한 것은 ['std :: unordered_multimap'] (http://en.cppreference.com/w/cpp/container/unordered_multimap)입니다. – juanchopanza

답변

0

문제점 (그리고 @juanchopanza가 보여 주려하는 것)은 올바르게 사용하기 위해 클래스에 대한 설명서를 읽어야한다는 것입니다. 지도는 키 (색인 키)와 값 (저장된 데이터) 간의 관계입니다. 이 경우 두 키 (즉 01) 만 사용하고 insert()을지도에 추가하면 은 새 데이터을 사용하여 이미 두 개의 키 셀에 요소를 삽입하지 않습니다. 예상되는 동작은 두 개의 다른 키만 사용하고 데이터가있는 셀은 두 개뿐입니다. 사용한 두 개의 키만 사용하여 삽입 한 첫 번째 항목입니다. Multimap 클래스를 사용하면 동일한 키을 가진 개의 항목을 가질 수 있으므로 모든 요소를 ​​올바르게 삽입 할 수 있습니다.

그러나 남은 다른 질문은 제공하는 기능을 사용하지 않는 경우 map을 사용해야하는 이유입니다. 지도를 사용하면 요소를 키로 구분할 수 있으므로 일반적으로 요소를 키로 구분할 수없는 멀티 맵에만 삽입하고 put() 요소는 키로 매핑합니다 ([] 연산자 사용).

각 클래스에 대한 설명서를 자세히 읽어보십시오.