【发布时间】:2012-11-04 20:16:44
【问题描述】:
我对新的 C++ unordered_map 有问题:我想使用 operator[] 和 const 键,但被拒绝了。
我不能给出完整的代码,但我可以像这样简化我的问题:
#include <unordered_map>
class A {
public:
A();
};
class B {
public:
B();
};
int main(int argc, char **argv) {
std::unordered_map<A &, B> myMap;
A a;
const A &ar = a;
B b;
myMap[ar] = b;
}
编译器的输出有点长,但结尾是:
/usr/include/c++/4.6/bits/hashtable_policy.h:537:5: note: no known conversion for argument 1 from ‘const A’ to ‘A&’
我使用const A &,因为在我的代码中,某些方法按原样将其提供给我。而且,顺便说一句,键应该是 const。我已经尝试了std::unordered_map<const A &, B> myMap;,但它也不起作用。
我使用 gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5),带有 -std=c++0x 标志。
你能告诉我为什么这是被禁止的吗?我必须说我不明白原因。
非常感谢(如果问题很愚蠢,请原谅......)。
【问题讨论】:
-
“我不能给出完整的代码,但我可以像这样简化我的问题” +1,因为这正是我们希望你在提问时所做的,试试将其减少到问题仍然存在的最小可能示例。
-
再次感谢整个社区。我很快就得到了许多准确而有用的答案。太棒了!
标签: c++ c++11 constants unordered-map