gpt4 book ai didi

c++ - std::map :使用自定义运算符时更新 key

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

std::map<KeyType,ValueType,Comparator> 使用自定义运算符时,它的设计只比较我的一些 KeyType 字段,两个对象可能是 KeyType k1, k2包含不同的数据,但对于 map 来说,它们看起来像同一个键。毕竟,这就是我们首先编写自定义比较器的原因。

如果我写

map[k1] = 1;
map[k2] = 2;

对于 k1 和 k2,比较器将它们报告为相等,映射将包含键/值对 {k1, 2} .

替换这对 {k1, 1} 最优雅的方法是什么?通过 {k2, 2}还是先删除k1再插入k2的唯一方法?

最佳答案

我可以找到两种不同的方法来用等效键替换映射中的键:

快速而肮脏的方法

只需交换一个 key 与另一个 key ,它 UB,但它应该适用于大多数std::map实现:

std::swap(const_cast<Key&>(map.find(k2)->first), k2);

Demo .

较慢且不太脏的方法

提供一个调整const方法Key改变它的内部状态:

void adjust(const Key& other) const { value = other.value; }

一项改进是检查此方法是否将 Key 转换为等效的 Key

Demo (对 OP 的改进)。

关于c++ - std::map :使用自定义运算符时更新 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43045964/

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