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

C++ unordered_set of pointers allows modifying elements

本文关键字:修改 元素 许修改 unordered set 指针 C++      更新时间:2023-10-16

如果这个问题得到了回答,我深表歉意。我确实专门搜索了这个问题,但找不到答案。

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_"。有人可以解释一下我错过了什么。

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

最好

创建指针unordered_set时,存储的键是指针本身,而不是对象的数据。集合将强制指针保持不变,否则需要重新哈希。

顺便说一下,如果您正在对对象的数据进行哈希处理,但存储其指针,则最终可能需要手动重新哈希,如果您更改了哈希函数中的字段。