gpt4 book ai didi

c++ - STL hash_map - 修改键

转载 作者:行者123 更新时间:2023-11-30 01:32:01 29 4
gpt4 key购买 nike

我有一个 HashMap 定义为

class KeyType {
int key;
mutable bool flag;
KeyType(int key) : key(key), flag(false) {}
void setFlag() const { flag = true; }
};

struct KeyType_hasher {
size_t operator()(const KeyType& s) const {
return static_cast<size_t> key;
}
};

struct KeyType_equal {
size_t operator()(const KeyType& s1, const KeyType& s2) const {
return s1.key == s2.key;
}
};

typedef hash_map<KeyType , ValueType, KeyType_hasher, KeyType_equal > KeyValueMap;

在稍后的代码中,我有一个地方必须循环遍历 map 并对我找到的每个值应用一个函数。根据函数的结果,我还必须修改迭代器中的键。

KeyValueMap theMap;
// theMap[key1] = value1;
// theMap[key2] = value2;
// theMap[key3] = value3;
for(KeyValueMap::iterator i = theMap.begin(); i != theMap.end(); ++i) {
if(true == ValueFunction(i->second))
i->first.setFlag();
}

我的问题是,如果必须的话,这是修改 key 的正确方法吗?有什么副作用吗?

最佳答案

您必须从容器中删除该元素,然后使用新键重新添加它。

C++ 关联容器均不支持以显着方式更改 key (其中显着 表示更改会更改散列容器中的散列结果或有序容器中的比较结果)。

如果您确实修改了 key (通过以某种方式绕过 const 正确性系统),您会从查找中得到不可预测的结果。

关于c++ - STL hash_map - 修改键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281836/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com