Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] std::map, a modyfikacja klucza

Ostatnio zmodyfikowano 2013-11-25 19:26
Autor Wiadomość
andziaa133
Temat założony przez niniejszego użytkownika
[C++] std::map, a modyfikacja klucza
» 2013-03-21 20:34:14
Witam,

Mam taki problem, dotyczący kontenera map.

map < Punkt, char >

gdzie

C/C++
struct Punkt {
    int x;
    int y;
};

I powiedzmy mam mapę, z jakąś ilością punktów jako klucz i odpowiadające im char-y. Potrzebuje jednak, w czasie trwania programu, zmienić tą mapę, dokładniej, zmienić jej klucz. Powiedzmy od każdego x i y KLUCZA chciałabym odjąć liczbę 2.
W jaki sposób mogę się odwołać do tych danych oraz je zmienić ?

C/C++
map < Punkt, char >::iterator iterator;

for( iterator = mapa.begin(); iterator != mapa.end(); ++iterator ) {
    Punkt pole = iterator->first;
    ?
    ?
    ?
    ?
}

Przydatne wszystkie wskazówki...
P-79083
pekfos
» 2013-03-21 20:39:37
Po co zmieniać? Przebudowywanie mapy nie jest efektywne. Jeśli zawsze będziesz modyfikować wszystkie elementy, to po prostu dodaj sobie 2 zmienne określające przesunięcia i modyfikuj indeksy przy dostępie do mapy.

Notice that value_type in map containers is an alias of pair<const key_type, mapped_type>.
Wg dokumentacji, klucz jest stały, więc jedyna możliwość, to utworzenie nowej mapy, wypełnienie zmodyfikowanymi elementami i podmienienie.
P-79084
DejaVu
» 2013-11-25 19:26:25
Tak jak pekfos napisał - nie da się modyfikować klucza mapy, więc jeżeli operacja dotyczy jednego elementu to usuwasz stary i dodajesz nowy. Jeżeli dotyczy operacja całej mapy to rozważ lepiej inną strukturę danych, np. std::vector, na którym wykonasz std::sort. Jeszcze lepiej będzie, jeżeli wymyślisz sposób, który spowoduje, że nie będzie konieczności modyfikowania wszystkich kluczy, lecz ewentualne będzie konieczne preparowanie właściwych wartości kluczy dla nowo dodawanych elementów (by nie trzeba było budować całej nowej mapy).
P-97460
« 1 »
  Strona 1 z 1