【问题标题】:std::map::erase() - which overload is faster?std::map::erase() - 哪个重载更快?
【发布时间】:2012-08-18 05:04:22
【问题描述】:

map::erase() 方法有两个重载来删除单个项目:

void erase ( iterator position );
size_type erase ( const key_type& x );

我需要检查哪个版本可能更快 - 我的猜测是第一个,因为第二个可能必须调用 map::find() 来查找迭代器?

谁能确认一下?

谢谢!

【问题讨论】:

  • 您有要擦除的迭代器吗?如果有,请使用它。

标签: c++ map


【解决方案1】:

第一个是摊销常数复杂度,第二个是对数。常数项不太可能大到足以使第一个版本比第二个版本慢,但我想对于非常小的地图,它们必须彼此无法区分。

【讨论】:

  • 我会更进一步:它们可能几乎无法区分,直到/除非您处理的是一张非常大的地图。
  • 第二个不能比第一个慢(基于迭代器的版本)。基于值的擦除的对数复杂度来自映射中的一个 find()(搜索元素),并添加了一个用于删除它的常数因子。所以,只要你有迭代器使用它来擦除,否则将值提供给擦除()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 2013-03-14
  • 2011-06-05
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多