我很好奇是否有类似于c ++中的Java哈希集的东西。即一个具有快速外观的数据结构,因为我只会在其上运行.contains(e)。同样,如果您可以启发我如何对您提出的任何数据结构执行.contains(),我将非常感激。哦,请不要发帖只看c ++文档,因为我已经这样做了,发现它们很麻烦。
答案 0 :(得分:14)
您可以使用std::unordered_set<>
(标准§23.5.6),其find
方法(进行查找)作为O(1)的平均复杂度:
#include <iostream>
#include <unordered_set>
int main()
{
std::unordered_set<int> example = {1, 2, 3, 4};
auto search = example.find(2);
if(search != example.end()) {
std::cout << "Found " << (*search) << '\n';
}
else {
std::cout << "Not found\n";
}
}
修改强>
根据@Drew Dormann的建议,您也可以使用count
,其平均复杂度为O(1):
#include <iostream>
#include <unordered_set>
int main()
{
std::unordered_set<int> example = {1, 2, 3, 4};
if(example.count(2)) {
std::cout << "Found\n";
}
else {
std::cout << "Not found\n";
}
}