我在适当的时候将代码从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
密钥类型?是否没有方法可以让您获得任何关联容器的键的引用?
关联容器只将(键,值)对公开为std::pair<const key_type, mapped_type>
,因此键类型上的附加const是多余的。