我已将代码从std::map
切换到std::unordered_map
。对于std::map
,我通常会编写以下内容以确保无法修改密钥:
std::map<const std::string, int>
坦率地说,我从未检查过这个const
是否具有任何价值。这总是编译并使用g ++。
现在,使用std::unordered_map
,以下内容无法与g ++ 4.5.1链接。
std::unordered_map<const std::string, std::string> m;
m["foo"] = "bar";
出现此链接错误:
未定义的符号:
"std::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const"
,引自:
修复很简单,删除const
,但除此之外,STL中是否还有一个点使用任何关联容器类来使用const
键类型?是否没有方法可以让您获得任何关联容器的键的引用?
答案 0 :(得分:21)
关联容器只将(key,value)对公开为std::pair<const key_type, mapped_type>
,因此密钥类型的附加const是多余的。