2014-07-09 11 views
11

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++

+1

'std :: unordered_set' byłoby najbliższe – quantdev

Odpowiedz

9

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"; 
    } 
} 
+2

Polecam' count() 'do emulacji zawiera(). Ta 2 linia staje się po prostu 'if (example.count (2))' –

+0

@ Drew: yep, dodano – quantdev

+0

niesamowite dziękuję wam obojgu! – user1352683