Подтвердить что ты не робот

Java HashSet эквивалент в С++

Мне было любопытно, было ли что-то похожее на хэш-сет Java в c++. Т.е. структура данных с быстрым взглядом, так как я буду только запускать .contains(e) на ней. Точно так же, если бы вы могли рассказать мне, как сделать .contains() для любой структуры данных, которую вы предлагаете, я был бы очень признателен. О, пожалуйста, не публикуйте, просто посмотрите документы c++, как я уже сделал, и посчитайте их обременительными.

4b9b3361

Ответ 1

Вы можете использовать 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";
    }
}

EDIT:

Как предложил @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";
    }
}