我发现 std::set
上的更新操作很乏味,因为 cppreference 上没有这样的 API。所以我目前做的是这样的:
//find element in set by iterator
Element copy = *iterator;
... // update member value on copy, varies
Set.erase(iterator);
Set.insert(copy);
基本上由 Set
返回的迭代器是 const_iterator
你不能直接改变它的值。
有一个更好的方法吗?或者也许我应该通过创建我自己的来覆盖 std::set
(我不知道它到底是如何工作的……)
原文由 Figo 发布,翻译遵循 CC BY-SA 4.0 许可协议
set
returnsconst_iterators
(the standard saysset<T>::iterator
isconst
, and thatset<T>::const_iterator
andset<T>::iterator
实际上可能是同一类型 - 请参阅 n3000.pdf 中的 23.2.4/6),因为它是一个有序容器。如果它返回常规的iterator
,您将被允许从容器下方更改项目值,这可能会改变排序。您的解决方案是更改
set
中项目的惯用方式。