2
私はordered_mapを作成し、以下の要素同じバケットに異なるハッシュコードを持つキー。 C++
私はバケツをチェックすると、私は7つのバケツがあったことが判明し挿入しました。
これは私が読んだものです。
un_orderedの関連コンテナの要素はバケットに編成されています。同じハッシュコードを持つキーは同じバケットに表示されます
しかし、私はキーのハッシュコードを印刷したとき、異なるハッシュコードを持つバケットに要素があることがわかりました。
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
typedef std::unordered_multimap<std::string,std::string> stringMap;
stringMap mymap;
mymap.insert({
{"house","maison"},
{"apple","pomme"},
{"tree","arbre"},
{"book","livre"},
{"door","porte"},
{"grapefruit","pamplemousse"},
});
unsigned n = mymap.bucket_count();
unsigned s = mymap.size();
std::cout << "mymap has " << n << " buckets.\n";
std::cout << "mymap size " << s << " keys.\n";
stringMap::hasher fn = mymap.hash_function();
for (unsigned i=0; i<n; ++i)
{
std::cout << "bucket #" << i << " contains: " << std::endl;;
for (auto it = mymap.begin(i); it!=mymap.end(i); ++it)
{
std::cout << "[" << it->first << ":" << it->second << "] ";
std::cout << "KEY HASH VALUE: " << fn (it->first) << std::endl;
}
std::cout << "\n";
}
return 0;
}
何かが不足していて、なぜ要素が異なるハッシュコードを持ち、同じバケットに存在するかを教えてください。
結果:正常なのです
mymap has 7 buckets.
mymap size 6 keys.
bucket #0 contains:
[book:livre] KEY HASH VALUE: 4190142187
[house:maison] KEY HASH VALUE: 4227651036
bucket #1 contains:
bucket #2 contains:
bucket #3 contains:
[grapefruit:pamplemousse] KEY HASH VALUE: 3375607049
[tree:arbre] KEY HASH VALUE: 335777326
bucket #4 contains:
bucket #5 contains:
[apple:pomme] KEY HASH VALUE: 2758877147
bucket #6 contains:
[door:porte] KEY HASH VALUE: 3658195372
おかげ
*「同じバケットに同じハッシュコードを持つキーが表示されます」*「!=」***異なる***ハッシュコードを持つキーは、***異なるバケットに表示されます。 –