【问题标题】:Which datastructure to use for finding an element [duplicate]用于查找元素的数据结构[重复]
【发布时间】:2018-05-28 07:26:32
【问题描述】:

我有几个项目保存在一个列表中。我想将已经处理过的项目添加到数据结构中(这对我来说是有意义的,即使你可能想知道为什么)。在处理列表中的下一个项目时,我首先要确定它之前是否已经处理过,所以可以这样说:

if(element_is_in_datastructure(current_element)) {
   do this
}
else
{
   do that
   add_element_to_datastructure(current_element)
}

我的问题是,什么是理想的数据结构,检查元素是否在其中不会花费太长时间。目前我没有太多元素(最多 30 个)要添加到数据结构中,但这个数字可能会增加,我不想失去性能。

【问题讨论】:

  • 您可能想使用std::setstd::map

标签: c++ performance data-structures find


【解决方案1】:

您可以使用map 例如std::unordered_map 将您的元素存储为keys。 然后只需检查他们的存在,例如

if(!yourMap.count(element))
{
   // your element is not in the structure
}

此发现需要地图大小的对数时间才能完成。

【讨论】:

  • 不是固定时间。它是对数的。
  • 谢谢,我编辑它^^
  • 如果您只需要一组元素,那么std::set 可能是一个更好的选择,就像它存储在树中的地图一样,但只存储 1 个元素而不是一对,你不需要。
  • 可以再修复一下吗? map 的对数,unordered_map 和 unordered_set 的常数?
  • 最好情况下它是常数,最坏情况下它是线性的,所以对数时间似乎是决定性的。 =]]
猜你喜欢
  • 1970-01-01
  • 2014-12-25
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 2011-04-07
  • 1970-01-01
相关资源
最近更新 更多