小编aLu*_*aLu的帖子

通过迭代器更改集合中的元素

我想更改集合(QSet)中的元素:

for(PSet::iterator pIt = P.begin(); pIt != P.end(); ++pIt)
  pIt->xp = 0;
Run Code Online (Sandbox Code Playgroud)

编译器不会让我这样做(“C3892:'var':你不能分配给 const 变量”)。集合迭代器似乎总是恒定的,因为担心更改元素可能会破坏其在集合中的正确位置。

就我而言,PSet 是一组结构,我为其定义了自己的哈希函数:

struct P
{
  P(int id, const Data_t& data)
     :xp(_INFINITY_)
     ,id(id)
     ,data(data){}

  int xp;  
  const int id;
  const Data_t data;
};
Run Code Online (Sandbox Code Playgroud)

我的哈希函数不考虑非常量成员 xp,因此我的上述分配对于集合中元素的顺序应该是完全安全的。我不想删除该元素并重新插入它,因为性能实际上是这里的一个问题。

我想我可以使用 const 强制转换,但这会损害我的代码的可读性并且看起来像一个令人讨厌的黑客。我还有其他选择吗?

c++ compiler-errors set

0
推荐指数
1
解决办法
3455
查看次数

标签 统计

c++ ×1

compiler-errors ×1

set ×1