【发布时间】:2021-12-31 02:48:23
【问题描述】:
我有一个简单的自定义类,声明如下,并且我已经实现了哈希函数和比较函数。散列函数使用字符串的标准散列,比较器只是检查键是否相等,所以我将跳过它们的定义。
我已经实现了一个包含此类对象的unordered_set(是的,我知道unordered_map,但我们在这里假设我想特别坚持unordered_set)。稍后,在某个时间点,我想修改通过迭代器找到的对象的值(但不是键)。
现在,我有点卡住了,我的问题是:
除了 (1) 我想避免通过const_cast 抛弃常量之外,还有其他方法可以实现这一点,以及 (2) extracting 来自我的无序集合的对象,修改它的值然后将其移回并(3)删除元素并在修改值后将其插入回来?
我在 SO 上看到过类似的问题,但那里的讨论总是关于具有可公开访问值的结构。
代码:
class myClass {
private:
string key;
string val;
public:
void getKey();
void getVal();
void setKey(string key);
void setVal(string val);
myClass(string key);
myClass(string key, string val);
}
<...>
<hasher's definition>
<comparator's definition
int main() {
unordered_set<myClass, myClassHasher, myClassComparator> myClassUset;
<...>
string some_val;
auto it = myClassUset.find(myClass{some_key});
if (it != myClassUset.end()) {
it->setVal(some_val);
};
}
【问题讨论】:
-
请参阅this question 了解一种方法。
-
@1201ProgramAlarm 我已经检查过了,如果你的班级成员是私人的,
mutable似乎不起作用(或者我错过了一些东西,我还需要以某种方式修改设置器)。
标签: c++ stl unordered-set