Jak przeiterować przez unoredered_map na odwrót?

0

Witam.

Tak jak w pytaniu, jak przeiterować przez unordered_map odwrotnie, to znaczy jakby reverse_iterator'em, którego ten kontener nie posiada?
Gdy mam taką mapę:

std::unordered_map<int, std::string> = {
                                                                  {1, "Abc"}, {2, "Bbc"}, {3, "Cbc"}
                                                              }

I gdy wypisuję w pętli iteratorem drugi element dostaję output

Cbc, Bbc, Abc

Co jest efektem odwrotnym od zamierzonego.
Myślę, że jest inny sposób, niż wrzucanie tego do vectora i wypisywanie vectora od tyłu.

Z góry dziękuję za pomoc.

Pozdrawiam.

3

Nie da się, iterator unordered_map spełnia założenia Fordward Iteratora, nic więcej.

Ale zastanów się może lepiej co chcesz osiągnąć: iterację w porządku odwrotnym od... no właśnie, jakiego? unordered_map, jak sama nazwa wskazuje (unordered) nie ma określonego porządku i jakikolwiek by on nie był, jest to detal implementacyjny.

0

Wszystko ma jakiś swój porządek. Z tego co się orientuję, map działa tak, że automatycznie się sortuje. Nie potrzebuję sortowanie, więc wybrałem unordered_map.
Wartości w unordered_map, są w takim porządku, w jakim się je tam wprowadziło, choć chyba nie do końca, skoro są na odwrót...

1

Nie. Unordered w nazwie powinno być dla użytkownika wystarczającą wskazówką, aby nie spodziewał się jakiegokolwiek porządku! Poczytaj jak działają hashmapy: nie masz gwarancji identycznego porządku między różnymi hashami, różnymi strategiami kubełkowania, itd.

0

Ok. Zapomniałem o hashmapie.
Czyli nie pozostaje nic innego jak użyć map, przekazywać argumenty w odwrotnej kolejności, lub dodawać po kolei wartości do vectora, a następnie wypisywać vector odwrotnie?

3

przekazywać argumenty w odwrotnej kolejności,

???

Jak chcesz mieć zachowany porządek, to użyj jakiegoś kontenera, który ten porządek trzyma.

0
kq napisał(a)

przekazywać argumenty w odwrotnej kolejności,
...

http://cpp.sh/4cigab

0

Tak jak pisałem: detal implementacyjny. http://cpp.sh/9prn3

3

Jeśli chcesz kolejność dokładnie jaką podałeś (albo dokładnie odwrotną) to od tego jest właśnie map.

unordered_map jest, jak sama nazwa wskazuje, nieuporządkowany.

2

Jeśli chcesz zachować kolejność umieszczania elementów w kontenerze, to masz proste kontenery typu: std::vector std::list std::queue.
std::map std::set definiują kolejność elementów przez relację między kluczami (kolejność dodawania elementów nie ma znaczenia).
Tak jak pisze kq std::unordered_map nie masz gwarancji jakiejkolwiek kolejności, ani ze względu na klucz, ani ze względu na kolejność dodawania elementów. Wszystko zależy od strategii dzielenia na kubełki, która cię nie interesuje (szczegół implementacyjny), jako użytkownika tych szablonów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1