首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新std::map中的键的值

更新std::map中的键的值
EN

Stack Overflow用户
提问于 2011-08-31 02:37:57
回答 7查看 7K关注 0票数 13

假设我们有一个简单的结构,如下所示

代码语言:javascript
运行
复制
struct T{
  int x;
  int y;
};
T t1, t2;

还假设我有一个map<T, int> myMap,并且两个T类型的结构仅使用它们的x值进行比较。即t1 < t2t1.x < t2.x.我正在尝试通过myMap更新一些键的y值。这应该不会影响贴图查看关键点的方式。除了删除旧元素并插入新元素之外,还有其他方法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-08-31 02:57:53

如果您确定y不参与您的类的“逻辑状态”,并且仅仅是一个实现细节,那么您可以将其声明为mutable

代码语言:javascript
运行
复制
struct T
{
  int x;
  mutable int y;
  bool operator<(const T& rhs) const { return x < rhs.x; }
};

现在您应该能够更改y

代码语言:javascript
运行
复制
for (auto it = m.begin(); it != m.end(); ++it)
{
  it->first.y = -2; // ouch? But it won't invalidate the map's invariants.
}
票数 13
EN

Stack Overflow用户

发布于 2011-08-31 02:40:44

不,map不能让您修改键,因为这可能会使映射不变量(元素的排序)无效-您知道它不会,但map无法知道这一点,所以它在谨慎方面出错,不允许这样做。

移除并重新插入是一种正确的方法。将键视为不可变的。

票数 9
EN

Stack Overflow用户

发布于 2011-08-31 02:48:21

如果y不参与比较,您可以将其标记为mutable,这样即使值是常量,也可以对其进行修改。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7248078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档