C++ 哈希映射、字符串比较和std::map?
首先,我想说几点我认为是正确的。请问这些可以核实吗C++ 哈希映射、字符串比较和std::map?,c++,hashmap,C++,Hashmap,首先,我想说几点我认为是正确的。请问这些可以核实吗 哈希映射按顺序存储字符串 将它们转换为整数 不知怎么的 STD::MAP不是哈希图,如果我使用字符串,我应该考虑使用哈希映射来处理内存问题? 字符串比较不好依赖 如果STD::MAP不是哈希映射,我不应该依赖字符串比较(基本上,我有一个带字符串的映射作为键……我被要求用哈希映射来查找)?C++中有没有散列图?如果没有,那么Boost呢 第二,对于[最初]一个std::map,哈希映射值不值得 我想我的观点是让大家明白…我计划有一个不同游戏
- 哈希映射按顺序存储字符串 将它们转换为整数 不知怎么的李>
- STD::MAP不是哈希图,如果我使用字符串,我应该考虑使用哈希映射来处理内存问题?
- 字符串比较不好依赖
如果STD::MAP不是哈希映射,我不应该依赖字符串比较(基本上,我有一个带字符串的映射作为键……我被要求用哈希映射来查找)?C++中有没有散列图?如果没有,那么Boost呢
第二,对于[最初]一个std::map
,哈希映射值不值得
我想我的观点是让大家明白…我计划有一个不同游戏状态的商店,我可以查找并注册到工厂。
如果需要更多信息,请询问
谢谢你的时间。我不相信你的观点大部分是正确的
- 当前标准中没有哈希映射。C++0x引入了无序的_映射,who的实现将是一个哈希表,您的编译器可能已经支持它了
- 映射被实现为一个平衡树,而不是一个哈希表。使用带有字符串的映射类型作为键或数据时,不会出现“内存问题”
- 在这两种情况下,字符串都不会存储为数字-无序的_映射将使用哈希函数从字符串派生数字键,但不会存储该键
- 我的经验是无序映射的速度大约是映射速度的两倍-它们具有基本相同的界面,因此您可以使用自己的数据尝试这两种方法-无论何时您对性能感兴趣,您都应该使用自己的真实数据进行测试,而不是依赖他人的经验。这两种映射类型对字符串键的长度都比较敏感
map <string, A> amap;
unordered_map <string, A> umap;
map-amap;
无序地图umap;
哈希映射通常具有字符串的整数表示,是的
map需要排序,所以不太可能将其实现为哈希表,我在实践中从未见过它
字符串比较的好坏完全取决于您在做什么、比较什么数据以及比较的频率。例如,如果第一个字母不同,那么这与整数比较几乎没有什么不同
您需要(这是Boost版本-如果您的编译器有TR1标准库,那么TR1标准库中也有一个版本)
对于游戏州来说值得吗?是的,但这只是因为使用无序的_图很简单。在此阶段,您过早地担心优化问题。省去对访问模式的担忧,因为你将每秒查找数千次(即当你的分析器告诉你这是个问题时)。我做了一个基准测试,比较std::map和boost::unordered\u map。 我的结论基本上是这样的:如果您不需要像equal_range这样特定于map的东西,那么请始终使用boost::unordered_map。
可以找到完整的基准测试STL扩展中有一个哈希映射,stdext::hash_映射。