Мне было любопытно, было ли что-то похожее на хэш-сет Java в c++. Т.е. структура данных с быстрым взглядом, так как я буду только запускать .contains(e) на ней. Точно так же, если бы вы могли рассказать мне, как сделать .contains() для любой структуры данных, которую вы предлагаете, я был бы очень признателен. О, пожалуйста, не публикуйте, просто посмотрите документы c++, как я уже сделал, и посчитайте их обременительными.
Java HashSet эквивалент в С++
Ответ 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";
}
}