Java HashSet在c ++中的等价物

时间:2014-07-09 01:46:28

标签: c++ data-structures lookup

我很好奇是否有类似于c ++中的Java哈希集的东西。即一个具有快速外观的数据结构,因为我只会在其上运行.contains(e)。同样,如果您可以启发我如何对您提出的任何数据结构执行.contains(),我将非常感激。哦,请不要发帖只看c ++文档,因为我已经这样做了,发现它们很麻烦。

1 个答案:

答案 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";
    }
}