【问题标题】:Is it possible to remove elements from an std::unordered_set through bucket iterators?是否可以通过桶迭代器从 std::unordered_set 中删除元素?
【发布时间】:2013-09-01 12:39:44
【问题描述】:

就像问题说的那样,您可以使用存储桶迭代器 (local_iterator) 从 std::unordered_set 中删除一个元素吗?我可以看到两种可能的解决方案:

  • 由于erase() 只接受全局iterators,local_iterator 是否有等效功能?
  • 是否可以为local_iterator 获得等效的全局iterator

如果不可行,请详细说明为什么不可行。

【问题讨论】:

  • 你不能在同一个函数调用中同时使用it++it
  • 已更新,但仍然导致相同的错误。
  • 您应该阅读std::remove_if。它实际上并没有删除元素。
  • 谢谢,我不知道。我删除了整个示例,因为它不再有任何用处。
  • 我对这个问题的解决方案是使用unordered_set.find(*local_iterator)local_iterator 转换为iterator

标签: c++ c++11 unordered-set


【解决方案1】:

显而易见的答案是否定的,因为在 支持这个的接口。也没有办法到达 iterator 来自 local_iterator,原因很明显 local_iterator 包含的信息要少得多。 (为了 大多数实现,我怀疑它会相当简单 执行erase( local_iterator ),有标准 需要它。另一方面,我想不出一个可以想象的 使用它,这可能是标准不需要它的原因。)

【讨论】:

  • 我怀疑这两个“明显”的论点。 (1) 将 local_iterator 转换为迭代器还需要什么桶号? (2) 有很多用例在迭代存储桶时擦除 local_iterator - 就像在迭代整个容器时有擦除迭代器的用例一样。不擦除local_iterator,std::unordered_set的const_local_iterator和local_iterator还有区别吗?
猜你喜欢
  • 2010-10-10
  • 2011-02-21
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 2014-09-22
相关资源
最近更新 更多