C++ 要使用哪个数据结构查找元素
我有几个项目保存在一个列表中。我想将已经处理过的项添加到数据结构中(在我的例子中,这是有意义的,尽管您可能想知道为什么)。在处理列表中的下一个项目时,我首先要确定它之前是否已被处理过,因此让我们这样说:C++ 要使用哪个数据结构查找元素,c++,performance,data-structures,find,C++,Performance,Data Structures,Find,我有几个项目保存在一个列表中。我想将已经处理过的项添加到数据结构中(在我的例子中,这是有意义的,尽管您可能想知道为什么)。在处理列表中的下一个项目时,我首先要确定它之前是否已被处理过,因此让我们这样说: if(element_is_in_datastructure(current_element)) { do this } else { do that add_element_to_datastructure(current_element) } 我的问题是,什么是理想的数据
if(element_is_in_datastructure(current_element)) {
do this
}
else
{
do that
add_element_to_datastructure(current_element)
}
我的问题是,什么是理想的数据结构,在这种结构中检查元素是否在其中不会花费太长时间。目前,我没有太多的元素(最多30个)将添加到数据结构中,但这个数字可能会增加,我不想失去性能。您可以使用
映射
,例如std::无序映射
将元素存储为键
。
然后检查他们的存在,例如
if(!yourMap.count(element))
{
// your element is not in the structure
}
完成此发现需要地图大小的对数时间 您可能想使用
std::set
或std::map
。它不是固定时间。它是对数的。谢谢,我编辑了它^^如果你只需要一组元素,那么也许std::set
是一个更好的选择,就像地图一样,它存储在树中,但只存储1个元素,而不存储一对,这是你不需要的。可以再次修复它吗?对数表示映射,常数表示无序_映射和无序_集?它在最佳情况下是常数,在最坏情况下是线性的,因此对数时间似乎是决定性的。=]]