web-dev-qa-db-ja.com

Java C ++で同等のHashSet

Java c ++のハッシュセットに似たものがあるかどうか興味がありました。つまり、.contains(e)のみを実行するため、高速なデータ構造です。同様に、提案するデータ構造に対して.contains()を実行する方法を教えていただければ、非常にありがたいです。O、すでに行っているので、c ++のドキュメントだけを見て投稿しないでください。

17
user1352683

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";
    }
}
16
quantdev