Map - zamienianie klucza z awrtoscią

0

Zrobiłem program i funkcję, która zamienia klucz z argumentem, gdy argument jest większy.
(mapa[i][2]=3 zamiast mapa[i][3]=2)

najpierw ustawiam nowy:
Poziom[i][iter1->second]=iter1->first;

potem usuwam stary:
Poziom[i].erase(iter1->first);


typedef map<int, map< int, int> > TMAP;
TMAP Poziom, Pion;
map < int,int >::iterator iter1,iter2;

for(iter1 = Poziom[i].begin(); iter1!=Poziom[i].end(); iter1++)               
                   {   
                       cout<<i<<"czytam:"<<iter1->first<<"  "<<iter1->second<<endl;
                       if (iter1->first > iter1->second)
                           {
                               Poziom[i][iter1->second]=iter1->first;
                               Poziom[i].erase(iter1->first);
                           }
                   }

Jednak zamienia około 95% - to pewnie przez to , że map w miedzy czasie sortuje dane, i niektore klucze są omijane... jak to można poprawić?

0
lukasz21212121 napisał(a)

Zrobiłem program i funkcję, która zamienia klucz z argumentem, gdy argument jest większy...

...if (iter1->first > iter1->second)...

Mi się wydaje że ta funkcja zamienia klucz z argumentem gdy klucz jest większy a nie argument.

Jeszcze jedna rzecz wydaje mi się dziwna:

Poziom[i].erase(iter1->first);

iter1 to przecież iterator dla map<int,int> więc nie wiem po co tam jest to ->first ale mogę się mylić.
Dla danych:

Poziom[1][1]=4;
    Poziom[1][2]=3;
    Poziom[1][3]=2;

Funkcja zamiast zamieniać usuwa po prostu ostatnią mapę, chyba tak nie powinno być. Musisz wymyślić co zrobić jeśli wartość w polu data jest równa jednemu z istniejących kluczy, bo w tym momencie po prostu nadpisywana jest zawartość pola mapy.

0

Iterujesz po strukturze i jednocześnie ją zmieniasz(zmieniasz jej "kształt").
Jest to niepoprawne.

Musisz zrobić tak:
-tworzysz pustą listę<int> L
-przechodzisz po mapie i jeżeli znajdziesz węzeł, w którym klucz>wartość, to wrzucasz ten klucz na listę L
-przechodzisz listę L i usuwasz z mapy węzły o tych kluczach

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