C std::set 更新很乏味:我无法就地更改元素

新手上路,请多包涵

我发现 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 许可协议

阅读 747
1 个回答

set returns const_iterators (the standard says set<T>::iterator is const , and that set<T>::const_iterator and set<T>::iterator 实际上可能是同一类型 - 请参阅 n3000.pdf 中的 23.2.4/6),因为它是一个有序容器。如果它返回常规的 iterator ,您将被允许从容器下方更改项目值,这可能会改变排序。

您的解决方案是更改 set 中项目的惯用方式。

原文由 Terry Mahaffey 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题