C ++ unordered_set指针允许修改元素

时间:2014-12-22 21:25:11

标签: c++ unordered-set

如果有人回答我的道歉。我确实专门搜索了这个问题,但找不到答案。

unordered_set包含指向用户定义类型的指针,其中一个类型是变量计数。

现在,当我尝试插入一个新对象 - 特别是指向对象的指针时,我会检查它是否已经存在。如果是,我只是增加该对象的计数。

问题: C ++如何允许我修改对象,这是我的unordered_set的关键?

auto iter =  mySet.find(w);
if(iter == mySet.end()) {
     mySet.insert(w);
} 
else { /* found the element. Increment the count. */
    (*iter) -> count += 1;
}

上面的代码工作正常并且符合预期。在第一次之后,任何后续插入对象的尝试都会导致计数增加。

文档说unordered_set的任何迭代器都是常量"即使没有const _"也没有。有人可以解释我所缺少的东西。

其他信息:我确实定义了相关的哈希和比较函数,它们作为模板args传递给unordered_set。

最佳,

1 个答案:

答案 0 :(得分:0)

当您创建unordered_set指针时,存储的键是指针本身,而不是对象的数据。该集合将强制指针保持不变或需要重新散列。

顺便说一句,如果您正在散列对象的数据但存储其指针,那么最终您可能需要手动重新散列,如果您更改了散列函数的一部分。