我有一组对,我想要改变我想要的第一个对的第二个字段:
#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迭代器。
上面有什么问题,我如何分配找到的迭代器结果指向的对?
这是因为set元素不应该是可变的,因为用于实现它的红黑树在逻辑上阻止我们使用实际节点。即使没有实现细节,set元素也不应该是可变的(正如上面的一条评论中指出的那样),否则我们可以将{2,3}
更改为{2,2}
,这将是荒谬的。