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

问题描述 投票:0回答:1

我有一组对,我想要改变我想要的第一个对的第二个字段:

#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迭代器。

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

c++ iterator const std-pair
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.