我正在使用 Visual Studio 2010,并且正在使用 C++ 11 功能 std::unordered_map::hash_function() 打印为每个键字符串计算的哈希值。
但是我发现在内部,条目是按随机顺序存储的,而不是按哈希值的递增顺序存储的。
在下面的示例中,Dad 计算到最低的哈希值并且应该是 my_family_height_map 的开始条目,但它不是。开始元素是 sis 对,它计算的哈希值比爸爸更高。
凸轮有人解释为什么我看到这种奇怪的行为?
// unorderedmap_usage.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <unordered_map>
#include <string>
#include <iostream>
int main()
{
typedef std::unordered_map<std::string, double> height_map;
height_map my_family_height_map;
my_family_height_map["Dad"] = 5.10;
my_family_height_map["Mom"] = 5.3;
my_family_height_map["Sis"] = 5.3;
my_family_height_map["Zach"] = 6.2;
height_map::const_iterator c_it;
// Print everything in the map
for(c_it = my_family_height_map.begin(); c_it!= my_family_height_map.end(); ++c_it)
{
std::cout << "Hash:" << hasher_func(c_it->first) << " Person is : " << c_it->first << " - height is " << c_it->second << "\n";
}
}
O/P:
哈希:572570820 人是:姐姐 - 身高是 5.3
哈希:306541572 人是:爸爸 - 身高是 5.1
哈希:1076885014 人是:妈妈 - 身高是 5.3
哈希:2613037907 人是:扎克 - 身高是 6.2
按任意关键继续。. .