对unordered_map使用const键

时间:2010-10-22 16:37:56

标签: c++ stl

我已将代码从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键类型?是否没有方法可以让您获得任何关联容器的键的引用?

1 个答案:

答案 0 :(得分:21)

关联容器只将(key,value)对公开为std::pair<const key_type, mapped_type>,因此密钥类型的附加const是多余的。