Using a const key for unordered_map(对 unordered_map 使用 const 键)
问题描述
我一直在适当的地方将我的代码从 std::map
切换到 std::unordered_map
.使用 std::map
,我通常会编写以下内容以确保无法修改密钥:
I've been switching my code over from std::map
to std::unordered_map
where appropriate. With std::map
, I typically write the following just to make sure the key cannot be modified:
std::map<const std::string, int>
坦率地说,我从来没有检查过这个 const
是否有任何价值.这一直与 g++ 一起编译和工作.
Frankly, I never checked if this const
was of any value. This has always compiled and worked with g++.
现在,使用 std::unordered_map
,以下内容无法与 g++ 4.5.1 链接.
Now, with std::unordered_map
, the following fails to link with 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
,引用自:
Undefined symbols:
"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"
, referenced from:
修复很简单,删除const
,但除此之外,在STL中是否有任何关联容器类使用const
键类型的点?没有任何方法可以让您获得对任何关联容器的键的引用吗?
The fix is simple, to remove const
, but besides that, is there even a point in STL with any of the associative container classes to use a const
key type? Are there no methods that let you get a reference to the key for any associative container?
推荐答案
关联容器仅将 (key,value) 对暴露为 std::pair
,因此键类型上的额外常量是多余的.
The associative containers only expose the (key,value) pair as std::pair<const key_type, mapped_type>
, so the additional const on the key type is superfluous.
这篇关于对 unordered_map 使用 const 键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:对 unordered_map 使用 const 键
基础教程推荐
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++,'if' 表达式中的变量声明 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 设计字符串本地化的最佳方法 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01