【发布时间】:2012-08-03 03:24:00
【问题描述】:
我目前在 std::map 上使用 [] 运算符:
map[key] = value;
没什么太疯狂的。但是,我的值包含一个 const 公共成员:
class Value
{
public:
Value(int input) : member(input) { }
const int member;
};
在不深入了解我的应用程序的细节的情况下,我们想要保留 const 成员。鉴于此,我假设 map[key] = value 正在做一些事情,例如首先删除现有值,然后插入新值:
map.erase(map.find(key));
map.insert(make_pair(key, value));
但是,实际上似乎正在发生的是operator [] 返回对值的引用,因此尝试使用 = 赋值或移动运算符或其他东西。显然,这是行不通的,因为无法重新分配成员。现在,我可以调用 erase 然后插入自己,但我想知道是否有一种方法可以使用这种“交换”技术来实现 map[key] = value。
【问题讨论】:
-
我不明白为什么这不起作用。地图是如何定义的?
-
为什么 map[] 不返回引用?这对我来说似乎更直观。
-
我并不是说它不应该返回一个引用,我对这个实现很满意,我只是在问是否有办法做我所要求的。让我以更简单的方式问这个问题:如果我制作 std::map
类型的映射,则 [] 永远无法工作(由于返回引用)。
标签: c++ dictionary std stdmap c++-standard-library