我有一个班级:
class C {
public:
C(): _a(a++){}
private:
static int a;
int _a;
};
int C::a = 0;
C c = C(); // c._a is 0
C d = C(); // d._a is 1
C e = C(); // e._a is 2
这正如我所期望的那样:a和obj._a递增1.但是如果我将c,d和e分配给unordered_map,它们会递增2:
unordered_map<int, C> map;
C c = C(); // c._a is 0
map[0] = c;
C d = C(); // d._a is 2
map[1] = d;
C e = C(); // e._a is 4
map[2] = e;
如何指定c,d和e进行映射并仍使静态int增加1?
答案 0 :(得分:5)
问题来自你的地图。当您访问map [0]时,映射将查找条目0,如果它不存在,将实例化它并返回对新实例的引用。
请尝试使用map.emplace(0, c)
来添加地图中的项目。
答案 1 :(得分:2)
您的问题是表达式map[0]
正在创建默认构造的“C”(并递增计数器),然后将该对象分配给。
解决方案是直接在地图中插入对象:
map.insert({0,c});