c++ - 以引用作为值的 std::unordered_map 不起作用?

标签 c++ dictionary boost unordered

此代码无法在 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.0\vc\include\tuple    746

Error   2   error C2439: 'std::pair<const _Kty,_Ty>::second' : member could not be initialized  c:\program files (x86)\microsoft visual studio 12.0\vc\include\tuple    746

当我将其更改为指针时,它可以正常编译。引用作为 std::unordered_map 中的值类型是否无效?

相同的代码可以很好地用于 boost::unordered_map。

最佳答案

引用不可复制也不可分配。在任何标准库容器中都不支持它们作为值类型。

您可以存储 std::reference_wrapper<MyClass>或者,几乎等同于 MyClass*虽然

关于c++ - 以引用作为值的 std::unordered_map 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423487/

相关文章:

C++ std::cin 产生额外的输入

python - 使用 NDK 在 Android 上从 C++ 运行 Python

c++ - 二维 vector 图

python - 追加到 Python 中嵌套字典内的列表

c++ - 是否可以在数组中保存具有不同参数的成员函数?

c++ - 3DS 模型加载 - 树/层次结构

haskell - 使用 Data.Map 计算不同值会泄漏内存

c++ - 序列化所需的公共(public)空构造函数

c++ - 在内存映射文件中 boost C++ 偏移指针

c++ - 在 C++ 中使用 unordered_set 作为 unordered_map 的键时出现的问题