【问题标题】:Efficient use of std::map and std::set in c++ [closed]在 C++ 中有效使用 std::map 和 std::set [关闭]
【发布时间】:2013-01-24 04:09:40
【问题描述】:

为了有效地使用向量,我们需要在设置元素之前保留内存。但是对于不是连续容器的 map 和 set,我们如何才能让它们快速高效呢?


我有一个大小为 10s 的向量/集合/映射,并希望添加不重复的元素。我想让它尽可能快。

【问题讨论】:

  • 无论如何,地图和集合都提供了快速的插入时间。向量必须重新分配内存块。
  • inserterase 的重载会提示避免 O(lg N),关联查找。但是,如果不指定您想要提高效率的操作,这不是一个真正的问题。
  • @jogojapan,嗯,你看,当向量过于接近代码中的集合时,有时会感染 O(log N) 插入复杂度。
  • @Hesam,您要查找的词是 contiguous。传染性意味着容易传播,就像疾病一样。
  • 每个问题一个问题,请。

标签: c++ map vector set


【解决方案1】:

Q1) 所有 STL 容器都已尽可能高效。程序员可以选择适合给定要求的数据结构。您需要了解每种数据结构的优缺点。

Q2) Map[key] = value 调用 operator[] 也可用于访问元素,而不仅仅是插入,而 insert() 函数仅特定于插入。 insert() 几乎没有 operator[] 上没有的其他重载功能,请查看http://www.cplusplus.com/reference/map/map/insert/

【讨论】:

  • 我可以争第一。如果需要,您可以生产更适合您的性能需求的产品。不过,我可能会稍微误解您的意图。
  • 如果没有元素,operator[] 添加一个元素。这有时是反直觉的,因为当您想从一个键中读出(不知道它不在地图中)并最终将其添加到地图中时。这有时对新程序员来说是个小问题。
  • @chris 你可以争论,但你错了;所有 STL 容器都尽可能高效。当然,您可以编写自己的容器,其自身的性能特征可能更适合您的需求。但这不是 STL 容器。它们是提供特定接口的通用容器。而且它们的效率与该界面可能一样高。仅仅因为某些东西更适合您的需求并不意味着它会以某种方式破坏经过验证的性能特征。
  • @Alice,我同意。尽管它们需要通用性,但在提高它们的效率方面付出了巨大的努力。
猜你喜欢
  • 2014-04-15
  • 2012-06-10
  • 1970-01-01
  • 2011-06-16
  • 2017-07-28
  • 2021-05-30
  • 2014-03-15
  • 2015-08-01
  • 2012-04-22
相关资源
最近更新 更多