如何通过查找迭代器结果分配给一组对的元素

how to assign to element of set of pairs through find iterator result

本文关键字:一组 元素 查找 何通过 迭代器 结果 分配      更新时间:2023-10-16

>我有一组对,我想更改我想先找到的某个对的第二个字段:

#include <iostream>
#include <utility>
#include <set>
int main(){
auto p=std::make_pair(2,3);
std::set<std::pair<int,int>> s{p};
auto it=s.find(p);
it->second=5; // compilation error
if(it!=s.end()) std::cout << it->second << 'n';
}

上面的代码编译失败,因为它抱怨无法将 find 的迭代器结果分配给。但是,我不明白为什么它是一个 const 迭代器。

上面有什么问题,我如何分配给 find 的迭代器结果指向的对?

这是因为 set 元素不应该是可变的,因为用于在逻辑上实现它的红黑树阻止了我们搞砸实际节点。即使没有实现细节,set 元素也不应该是可变的(如上面的评论之一所指出的(,否则我们可以{2,3}更改为{2,2},这将是荒谬的。