将引用作为值的std::unordered_map不起作用
std::unordered_map with references as values does not work?
此代码无法在Visual Studio 2013:中编译
#include <iostream>
#include <unordered_map>
class MyClass
{
public:
char a;
};
int main()
{
std::unordered_map<int, MyClass&> MyMap;
MyClass obj;
obj.a = 'a';
MyMap.emplace(1, obj);
std::cout << MyMap[1].a;
}
带有这些错误消息:
Error 1 error C2440: 'initializing' : cannot convert from 'int' to 'MyClass &' c:program files (x86)microsoft visual studio 12.0vcincludetuple 746
Error 2 error C2439: 'std::pair<const _Kty,_Ty>::second' : member could not be initialized c:program files (x86)microsoft visual studio 12.0vcincludetuple 746
当我把它改为指针时,它编译得很好。引用作为std::unordereded_map中的值类型无效吗?
同样的代码也适用于boost::unordered_map。
引用不可复制,也不可赋值。它们在任何标准库容器中都不支持作为值类型。
您可以通过存储std::reference_wrapper<MyClass>
或MyClass*
如果对容器进行了大量操作,则容器值必须是可复制的或可移动的。显然,有了参考文献,这是不可能的。因此,您的程序是非法的。
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶