以下代码示例将无法编译,但可以通过删除const
之前的std::string
说明符作为无序映射键来进行编译。
#include <unordered_map>
#include <utility>
#include <string>
#include <iostream>
int main()
{
int myint = 5;
std::unordered_map<const std::string, int*> map;
map.insert({"string", &myint});
std::cout << *map.at("string") << std::endl;
return 0;
}
当const std::string
用作密钥时,为什么在std::string
被用作密钥时无法编译此代码?
答案 0 :(得分:2)
std::unordered_map
使用std::hash
作为哈希函数。它使用模板类型std::hash
的密钥类型。 <string>
为std::hash
专门设置了std::string
,但由于密钥类型为const std::string
,因此没有匹配的专门化和编译失败。
实际上,使用std::unordered_map<std::string, int*>
可以完全满足您的需求。所有关联容器中的键已经为const
,因此没有理由在const
中标记模板参数。