【发布时间】:2013-03-13 19:30:08
【问题描述】:
似乎 C++ 在标准库中没有字符串的散列函数。这是真的吗?
什么是在 unordered_map 中使用字符串作为键的工作示例,可以与任何 c++ 编译器一起使用?
【问题讨论】:
-
我很好奇是什么让您认为标准库(至少是支持
unordered_map的库)不支持std::string的哈希函数? -
“错误 C2338:C++ 标准不提供这种类型的哈希。”当我尝试使用字符串时。
-
也许这个 SO 答案可能与您发生的事情有关:stackoverflow.com/a/11157019/12711 您是否直接使用
basic_string<>而不是通过std:stringtypedef?您可能可以将basic_string<>用于某些目的而不会出现编译器错误,因为另一个标头恰好正在拉入xstring(它给您basic_string<>,但不是std::hash<string>) -
所以底线是 - 如果你想在
unordered_map<>中使用字符串,请确保你有一个#include <string>- 实际上,任何时候你都在使用std::string。不幸的是,由于其他包含的副作用,编译器有时会让您在没有包含的情况下逃脱。然后,当您添加一个实际需要string标头的使用时,您会从编译器中得到一个神秘的、非显而易见的错误。 -
有时发生在我身上的是 IDE 错误地将我的
#include <unordered_map>更改为#include <bits/unordered_map.h>。因此,请确保您包含了正确的库。
标签: c++ string c++11 key unordered-map