C++ 用于快速查找的最佳STL容器

C++ 用于快速查找的最佳STL容器,c++,collections,stl,C++,Collections,Stl,我需要存储一个整数列表,并快速确定列表中是否已经存在一个整数。不会存储任何副本 我不会插入或删除任何值,但会附加值(可能实现为插入) 这方面最好的STL容器类是什么?我在谷歌上找到了std::multimap,但我发现它似乎需要一个键/值对,而我没有 我是STL的新手。我可以得到一些建议吗?当值和键不分开时,可以使用集合而不是映射 您可以使用不存储重复项的非多版本,而不是多集/-map 您可以使用std::unordered_set替代集合。对于您的用例,它可能更快 还有其他不太通用的数据结构可

我需要存储一个整数列表,并快速确定列表中是否已经存在一个整数。不会存储任何副本

我不会插入或删除任何值,但会附加值(可能实现为插入)

这方面最好的STL容器类是什么?我在谷歌上找到了
std::multimap
,但我发现它似乎需要一个键/值对,而我没有


我是STL的新手。我可以得到一些建议吗?

当值和键不分开时,可以使用集合而不是映射

您可以使用不存储重复项的非多版本,而不是多集/-map

您可以使用
std::unordered_set
替代集合。对于您的用例,它可能更快

还有其他不太通用的数据结构可用于表示整数集,其中一些可能更有效,具体取决于用例。但是标准库不一定为您提供这些其他数据结构

但我不清楚哪个搜索速度最快

无序集比有序集具有更好的查找渐近复杂性。对于您的用例,它是否更快,您可以通过测量来发现

不可能超过一千左右

在这种情况下,渐近复杂性并不一定相关

特别是对于这样的小ish集,排序向量可以非常有效。考虑到您“不会插入或删除任何值”,向量也不会有明显的缺点。标准库没有提供使用排序向量在内部实现的集合容器,但它提供了向量容器以及所有必要的算法

我不知道容器是如何计算散列的

您可以为无序容器提供哈希函数。默认情况下,它使用
std::hash
std::hash
使用实现定义的哈希函数。

是跟踪
int
s的重复项的好选择,因为插入和查找平均可以在恒定时间内完成


插入 使用成员函数可以在集合中插入新的
int

std::unordered_set<int> s;
s.insert(7);
bool is_present(const std::unordered_set<int>& s, int value) {
   return s.find(value) != s.end();
}

以下是所有标准容器的列表供将来参考。
无序集
@FrançoisAndrieux:谢谢。但我不清楚哪个搜索速度最快<代码>设置似乎是一种可能性。但是,我也不清楚我的速度有多快。整数会落在某个范围内吗?你已经给出了复杂性。但时间安排需要像往常一样以您的使用情况为基准。(在缓存使用、分支预测等方面,线性搜索可能比二进制搜索更快)。