Próbuję zrozumieć, w jaki sposób jest iterowanie poprzez zaimplementowane hashtable. Po prostu nie mogę tego sobie wyobrazić. Jestem szczególnie zainteresowany szybkością takiej iteracji. Na przykład:W jaki sposób jest iterowane za pośrednictwem hashtable?
QHash<int, std::string> hashTable;
...
for (auto it = hashTable.begin(); it != hashTable.end(); ++it)
std::cout << it.value() << std::endl;
Czy jest to operacja O(hashTable.size())
?
Próbowałem zagłębić się w kodzie źródłowym, ale nie mogłem znaleźć właściwej definicji.
Dziękujemy! Więc operacja jest zawsze w czasie liniowym, prawda? –
Tak, liniowo do liczby wiader + liniowo do liczby wpisów. – Philipp
Twoja pętla 'for' jest odpowiednikiem algorytmu STL' std :: for_each'. Algorytm ten jest liniowy pod względem liczby odwiedzanych elementów. Co więcej, kontener 'std :: unordered_map' ma przynajmniej iterator forward, a wszystkie operacje na takich iteratorach są co najwyżej amortyzowane. Oznacza to, że pętla na całej tablicy mieszającej ma także złożoność czasu liniowego (a nie tylko złożoność wielkości liniowej). – TemplateRex