我想更改 a 中的元素set
,所以我使用了set<T>::iterator
. 但是,编译器认为“元素是 const”。然后我意识到这set<T>::iterator
是一个const_iterator
...
那么,我怎样才能改变元素呢?删除它然后插入一个新的?
我想更改 a 中的元素set
,所以我使用了set<T>::iterator
. 但是,编译器认为“元素是 const”。然后我意识到这set<T>::iterator
是一个const_iterator
...
那么,我怎样才能改变元素呢?删除它然后插入一个新的?
的元素set
将按排序顺序排列。如果允许你修改一个元素,那么这个排序顺序就不能保持。因此,您不能修改该项目。您需要删除现有元素并插入一个新元素。
集合元素是常量,不能就地修改。修改可以改变排序谓词而不改变元素的位置,这会违反数据结构的约束。
但是现在在未来(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));
列表操作仍然有成本,但对象本身不会被破坏或复制。
编辑:您不能将元素添加到集合中的特定位置。无论您执行什么操作,该集合都应按排序顺序排列。所以你必须删除特定元素并插入新元素,这样集合的顺序就不会丢失。
另请阅读有关set的更多信息!