Jestem ciekawy, czy było coś podobnego do Java hashset w C++. To jest struktura danych o szybkim wyglądzie, ponieważ będę tylko działać. Zawiera (e) na niej. Podobnie, gdybyś mógł mnie oświecić, jak zrobić .contains() na dowolnej strukturze danych, którą proponujesz, byłbym bardzo wdzięczny. O, proszę, nie wysyłaj po prostu spójrz na C++ dokumenty, jak już to zrobiłem i znajdź je uciążliwe.Java HashSet equiv in C++
Odpowiedz
Można użyć std::unordered_set<>
(standardowo § 23.5.6), jego find
metoda (do zrobienia odnośnika) jako średnia złożoność 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:
Zgodnie z sugestią @Drew Dormann można alternatywnie użyć count
, który ma również średnią złożoność 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";
}
}
Polecam' count() 'do emulacji zawiera(). Ta 2 linia staje się po prostu 'if (example.count (2))' –
@ Drew: yep, dodano – quantdev
niesamowite dziękuję wam obojgu! – user1352683
'std :: unordered_set' byłoby najbliższe – quantdev