C++ 11의 unordered_map 라이브러리로 작업 중이며 버킷 작동 방식에 대해 약간 혼란 스럽습니다. cplusplus 웹 사이트의 문서에 따라 그들이 생각했던대로 작동하지 않는다는 것이 분명합니다.unordered_map 버킷과의 충돌
내 쌍의 키가 동일한 버킷으로 해시 될 것으로 예상됩니다. 예를 들면 :
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, string> map;
map.emplace("abc", "bca");
map.emplace("abc", "bac");
cout << map.bucket_size(map.bucket("abc")) << endl;
cout << map.bucket_count() << endl;
return 0;
}
, 그것이 여기 출력은 그러나
2
1
될 것이라고했다 나의 기대
1
2
내가 무엇 출력이 훨씬 더 이상적 내 기대보다 이해 가능한 한 적은 체인을 유지하는 것이 목표이지만, 내 목적에 따라이 체인 및 충돌이 발생하여 프로그램에 필요한 계산을 수행 할 수 있기를 바랍니다. 이것을 성취하기위한 단계가 빠졌습니까?
내가하려고하는 것은 데이터 구조를 사용하여 정렬 할 때 동일한 단어를 연결하는 것입니다. 예를 들어, "ate"와 "eat"이 "aet"에서 충돌하기를 원합니다. 그냥 키를 정렬 된 단어로 유지하고 내가 추가하는 값 벡터를 만들어야합니까? – TrueAzure
@TrueAzure,지도가 아닌 멀티 맵 (키가 정렬 된 값)을 원할 수도 있습니다. 아마 2 단계 (지도, 벡터) 접근법을 시도하는 것보다 쉽습니다. – paxdiablo
벡터로 처리 할 수 있었지만 너무 느립니다. 내 학교의 실험실 서버에서 .2s 미만의 100k 단어 사전 텍스트 파일에서이 작업을 수행하려고합니다. 벡터 구현은 .3s를주고받습니다. 레드 - 블랙 트리로지도가 구현되지 않았습니까? – TrueAzure