8

我想更改 a 中的元素set,所以我使用了set<T>::iterator. 但是,编译器认为“元素是 const”。然后我意识到这set<T>::iterator是一个const_iterator...

那么,我怎样才能改变元素呢?删除它然后插入一个新的?

4

3 回答 3

21

的元素set将按排序顺序排列。如果允许你修改一个元素,那么这个排序顺序就不能保持。因此,您不能修改该项目。您需要删除现有元素并插入一个新元素。

于 2012-03-07T11:34:07.163 回答
1

集合元素是常量,不能就地修改。修改可以改变排序谓词而不改变元素的位置,这会违反数据结构的约束。

但是现在在未来(C++17),可以使用extract成员函数修改元素而不擦除:

std::set<std::string> stringset{"a", "b", "c"};
auto node = stringset.extract(stringset.begin());
std::string& str = node.value();
str = "d";
stringset.insert(std::move(node));

列表操作仍然有成本,但对象本身不会被破坏或复制。

于 2020-10-24T15:30:35.510 回答
0

编辑:您不能将元素添加到集合中的特定位置。无论您执行什么操作,该集合都应按排序顺序排列。所以你必须删除特定元素并插入新元素,这样集合的顺序就不会丢失。

另请阅读有关set的更多信息!

于 2012-03-07T11:48:34.443 回答