假设我们有一个简单的结构,如下所示
struct T{
int x;
int y;
};
T t1, t2;还假设我有一个map<T, int> myMap,并且两个T类型的结构仅使用它们的x值进行比较。即t1 < t2当t1.x < t2.x.我正在尝试通过myMap更新一些键的y值。这应该不会影响贴图查看关键点的方式。除了删除旧元素并插入新元素之外,还有其他方法吗?
发布于 2011-08-31 02:57:53
如果您确定y不参与您的类的“逻辑状态”,并且仅仅是一个实现细节,那么您可以将其声明为mutable
struct T
{
int x;
mutable int y;
bool operator<(const T& rhs) const { return x < rhs.x; }
};现在您应该能够更改y了
for (auto it = m.begin(); it != m.end(); ++it)
{
it->first.y = -2; // ouch? But it won't invalidate the map's invariants.
}发布于 2011-08-31 02:40:44
不,map不能让您修改键,因为这可能会使映射不变量(元素的排序)无效-您知道它不会,但map无法知道这一点,所以它在谨慎方面出错,不允许这样做。
移除并重新插入是一种正确的方法。将键视为不可变的。
发布于 2011-08-31 02:48:21
如果y不参与比较,您可以将其标记为mutable,这样即使值是常量,也可以对其进行修改。
https://stackoverflow.com/questions/7248078
复制相似问题