Złożoność std :: unordered_map C ++

Dużo czytałemmapa nieuporządkowana (c ++ 11) złożoność czasu tutaj w stackoverflow, ale nie znalazłem odpowiedzi na moje pytanie.

Załóżmy, że indeksowanie jest liczbą całkowitą (na przykład):

Funkcje insert / at działają stale (w średnim czasie), więc ten przykład zajmie O (1)

std::unordered_map<int, int> mymap = {
            { 1, 1},
            { 100, 2},
            { 100000, 3 }
};

Ciekawe, ile czasu zajmuje iterowanie wszystkich (nieposortowanych) wartości zapisanych na mapie - np.

for ( auto it = mymap.begin(); it != mymap.end(); ++it ) { ... }

Czy mogę założyć, że dostęp do każdej przechowywanej wartości ma tylko jeden raz (lub dwa razy lub stały czas)? Oznaczałoby to, że iteracja przez wszystkie wartości znajduje się na mapie O (N) o wartości N. Inną możliwością jest to, że mój przykład z kluczami {1,10,100000} może zająć do 1000000 iteracji (jeśli jest reprezentowana przez tablicę)

Czy istnieje jakikolwiek inny kontener, który można iterować liniowo i stale uzyskiwać dostęp do wartości przez dany klucz?

Naprawdę potrzebowałbym tego (pseudo kod)

myStructure.add(key, value) // O(1)
value = myStructure.at(key) // O(1)
for (auto key : mySructure) {...} // O(1) for each key/value pair = O(N) for N values

Czy std :: unordered_map to struktura, której potrzebuję?

Indeksowanie całkowite jest wystarczające, średnia złożoność również.

questionAnswers(3)

yourAnswerToTheQuestion