Jeśli klucze są stałymi punktami do znaków, mapa jest sortowana przez kluczowe wskaźniki, a nie literałów. Tego prawie nie chce. Rozważ następujące pary klucza/wartości owoców i ich zewnętrzne kolory:
„śliwka” => „fiolet”
„BlackBerry” => „ciemnoniebieski”
„Watermelon” => „zielony”
„morelot”, => "pomarańczowy"
„papaya” => "pomarańczowy"
„Banana” => „żółty”
Owoce to klucze, a kolory są wartościami. Ta lista elementów (pary klucza/wartości) nie jest sortowana. Poniższy program tworzy mapę tej listy i wyświetla ją taką, jaka jest, nieporządkowana przez literały String:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapaposeł;
MP [„śliwki”] = „fiolet”;
MP [„BlackBerry”] = „Dark Blue-Black”;
MP [„Watermelon”] = „zielony”;
MP [„apricot”] = "Orange";
MP [„papaya”] = "Orange";
MP [„banan”] = „żółty”;
dla (mapa:: iterator it = mp.zaczynać(); To != MP.koniec(); it ++)
Cout << it->Pierwszy << " => " << it->drugi << endl;
powrót 0;
Wyjście to:
śliwka => fiolet
BlackBerry => ciemnoniebieski czarny
Watermelon => zielony
Apricot => Orange
papaya => pomarańczowy
banan => żółty
Nieporty przez literały smyczkowe, ale posortowane przez wskaźniki. Aby użyć mapy w programie C ++, biblioteka map musi zostać dołączona do dyrektywy w dołącz.
Innym sposobem utworzenia powyższej prostej mapy jest następujący:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapaMP („śliwki”, „fioletowy”, „BlackBerry”, „ciemnoniebieski-czarny”, „Watermelon”, „zielony”, „Apricot”, „Orange”, „Papaya” , „Orange”, „banana”, „żółty”);
dla (mapa:: iterator it = mp.zaczynać(); To != MP.koniec(); it ++)
Cout << it->Pierwszy << " => " << it->drugi << endl;
powrót 0;
Wyjście to:
śliwka => fiolet
BlackBerry => ciemnoniebieski czarny
Watermelon => zielony
Apricot => Orange
papaya => pomarańczowy
banan => żółty
Nieporty przez literały smyczkowe, choć posortowane przez wskaźniki. Gdyby klawisze były liczbami całkowitymi, wyjście byłyby posortowane przez klucze. W praktyce klucze wielu map są literałami smyczkowymi. W tym artykule wyjaśniono, w jaki sposób klucze literałów smyczkowych mogą sortować mapę.
Treść artykułu
Sortuj podczas tworzenia
Pełny szablon konstrukcji mapy to:
szablon, Class Allocator = Allocator >> mapa klas;
Zajęcia, porównaj i alokator, mają wartości domyślne. Oznacza to, że mają domyślną specjalizację, której nie trzeba wpisywać w deklaracjach map (instancje). Interesujące jest tutaj klasa porównawcza. Nazwa klasy jest porównana, a domyślna specjalizacja jest „mniej”. "mniej Mapa jest zwykle tworzona posortowana przez klucze podczas tworzenia. Jeśli klucze są const char*, wówczas wskaźniki do cytowanych dosłownych sznurków zostaną sortowane, a nie dosłowne teksty. Aby mieć ciągi jako klucze sortowane podczas tworzenia, ciągi muszą być literalem obiektów ciągów utworzonych z klasy ciągów. Oznacza to, że biblioteka ciągów musi być uwzględniona, a także biblioteka map. Tworzenie rosnącego W poniższym programie mapa jest tworzona, posortowana rosnąca: Wyjście to: Nawet gdyby mniej pominięto z szablonu, sortowanie nadal się wznosiło, ponieważ mniej jest domyślnie. Tworzenie maleństwa Aby utworzyć mapę, tak że jest ona sortowana w kolejności malejącej według klawiszy, specjalizacja porównywania musi zostać zakodowana. Poniższy program ilustruje to: Wyjście to: Produkowanie zasięgu schodzącego Zakres mapy można wytwarzać w kolejności malejącej. Obejmuje to utworzenie drugiej mapy, która jest zakresem od pierwszej mapy. Poniższy program ilustruje to: Wyjście to: Pierwszy obiekt mapy ma sześć elementów: Rozważany zakres to: W kodzie „ITB ++” wskazuje na „banan”, „żółty” i „Ite-” wskazuje na „Watermelon”, „zielony” dla zakresu. Podczas obsługi zakresu w C ++ końcowy element nie jest zaangażowany w manipulację. I tak wyjście ma cztery elementy z „Watermelon”, „zielony”. Specjalizacja parametru szablonu Porównanie drugiej mapy jest większa. Gdyby był mniej lub pominięty, zasięg spowodowałby kolejność rosnącą. Porównanie dwóch elementów według klucza key_compary key_comp () const Ta funkcja członka zwraca kopię obiektu porównawczego używanego przez kontener mapy do porównywania kluczy. Obiekt porównawczy jest obiektem funkcyjnym. Zakładałoby to dwa klucze jako argumenty i powróciłby, gdyby lewy klucz jest mniej niż prawy. Dzięki temu segment kodu powinien być: Key_comprena nie jest rozpoznawana przez kompilator. Eliminowanie key_compreu w tym segmencie kodu, zastępując KC w drugim instrukcji, powoduje: Poniższy program ilustruje użycie key_comp (). Dane wyjściowe to 0 dla fałszu. Prawdziwym problemem z powyższym segmentem kodu jest to, że przestrzeń nazw dla Key_compre. Jeśli segment był, Zadziałałoby (zaakceptowane przez kompilatora). value_compary value_comp () const Ta funkcja członka jest podobna do key_comp (). Uwaga: tutaj nie jest to wartość pary klucza/wartości, o której mowa, o której mowa; jest to element pary klucza/wartości. Tak więc dwa argumenty dotyczące obiektu funkcji wartości_compary są elementami iteratorem. Poniższy program używa wartości_comp (), porównując pierwsze i ostatnie elementy, „apricot”, „pomarańczowy” i „Watermelon”, „zielony”: Dane wyjściowe to 1, dla prawda. Iteratorzy ITB i ITE zostały odniesione do posiadania swoich elementów, z operatorem pośredniego. Sortowanie mapy utworzonej z listą inicjalizatora W poniższym programie, w którym sortowanie maleje, klawisze są obiektami ciągów, utworzone z klasy String: Wyjście to: Wniosek Mapa jest tworzona sortowana według klawiszy, rosnących. WSPÓŁPRODZENIE to domyślna kolejność. Aby to zejść, dodaj specjalizację parametrów szablonu, większą jako trzeci argument, do listy argumentów szablonu. Uwaga: Jeśli klucze są ciągami, muszą być utworzone z klasy ciągów, jak pokazano powyżej. Klucze smyczkowe jako const-char* lub char-arr [], kończą się posortowanymi wskaźnikami, a nie literałami. #włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapa
MP [„śliwki”] = „fiolet”;
MP [„BlackBerry”] = „Dark Blue-Black”;
MP [„Watermelon”] = „zielony”;
MP [„apricot”] = "Orange";
MP [„papaya”] = "Orange";
MP [„banan”] = „żółty”;
dla (mapa
Cout << it->Pierwszy << " => " << it->drugi << endl;
powrót 0; Apricot => Orange
banan => żółty
BlackBerry => ciemnoniebieski czarny
papaya => pomarańczowy
śliwka => fiolet
Watermelon => zielony #włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapa
MP [„śliwki”] = „fiolet”;
MP [„BlackBerry”] = „Dark Blue-Black”;
MP [„Watermelon”] = „zielony”;
MP [„apricot”] = "Orange";
MP [„papaya”] = "Orange";
MP [„banan”] = „żółty”;
dla (mapa
Cout << it->Pierwszy << " => " << it->drugi << endl;
powrót 0; Watermelon => zielony
śliwka => fiolet
papaya => pomarańczowy
BlackBerry => ciemnoniebieski czarny
banan => żółty
Apricot => Orange #włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapa
MP [„śliwki”] = „fiolet”;
MP [„BlackBerry”] = „Dark Blue-Black”;
MP [„Watermelon”] = „zielony”;
MP [„apricot”] = "Orange";
MP [„papaya”] = "Orange";
MP [„banan”] = „żółty”;
mapa
ITB ++;
mapa
Ite--;
mapa
dla (mapa
Cout << it->Pierwszy << " => " << it->drugi << endl;
powrót 0; śliwka => fiolet
papaya => pomarańczowy
BlackBerry => ciemnoniebieski czarny
banan => żółty Apricot => Orange
banan => żółty
BlackBerry => ciemnoniebieski czarny
papaya => pomarańczowy
śliwka => fiolet
Watermelon => zielony banan => żółty
BlackBerry => ciemnoniebieski czarny
papaya => pomarańczowy
śliwka => fiolet
Watermelon => zielony key_compary kc = mp.key_comp ();
bool Bl = kc („Watermelon”, „morela”); Bool Bl = MP.key_comp () („Watermelon”, „morel”);
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapa
MP [„śliwki”] = „fiolet”;
MP [„BlackBerry”] = „Dark Blue-Black”;
MP [„Watermelon”] = „zielony”;
MP [„apricot”] = "Orange";
MP [„papaya”] = "Orange";
MP [„banan”] = „żółty”;
Bool Bl = MP.key_comp () („Watermelon”, „morel”);
Cout << bl << endl;
powrót 0; mapa
bool Bl = kc („Watermelon”, „morela”); #włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapa
MP [„śliwki”] = „fiolet”;
MP [„BlackBerry”] = „Dark Blue-Black”;
MP [„Watermelon”] = „zielony”;
MP [„apricot”] = "Orange";
MP [„papaya”] = "Orange";
MP [„banan”] = „żółty”;
mapa
mapa
Ite--;
mapa
bool Bl = vc ( *itb, *ite);
Cout << bl << endl;
powrót 0; #włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()
mapa
dla (mapa
Cout << it->Pierwszy << " => " << it->drugi << endl;
powrót 0; Watermelon => zielony
śliwka => fiolet
papaya => pomarańczowy
BlackBerry => ciemnoniebieski czarny
banan => żółty
Apricot => Orange