Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 要使用哪个数据结构查找元素_C++_Performance_Data Structures_Find - Fatal编程技术网

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个元素,而不存储一对,这是你不需要的。可以再次修复它吗?对数表示映射,常数表示无序_映射和无序_集?它在最佳情况下是常数,在最坏情况下是线性的,因此对数时间似乎是决定性的。=]]