对unordered_map使用const键

问题描述 投票:19回答:1

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

c++ stl
1个回答
22
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.