Se i tasti sono costantemente puntatori a carattere, la mappa viene ordinata dai puntatori chiave e non dai letterali delle stringhe chiave. Questo non è quasi quello che qualcuno vuole. Prendi in considerazione le seguenti coppie chiave/valore di frutta e i loro colori esterni:
"Plum" => "Purple"
"BlackBerry" => "blu scuro"
"Watermelon" => "Green"
"albicocca", => "arancione"
"Papaya" => "Orange"
"banana" => "giallo"
I frutti sono le chiavi e i colori sono i valori. Questo elenco di elementi (coppie chiave/valore) non è ordinato. Il seguente programma crea una mappa di questo elenco così com'è e la visualizza così com'è, non motivata dai letterali delle stringhe:
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geograficaMP;
mp ["plum"] = "viola";
mp ["blackberry"] = "blu scuro-nero";
mp ["Watermelon"] = "Green";
mp ["albicocca"] = "arancione";
MP ["Papaya"] = "Orange";
mp ["banana"] = "giallo";
per (mappa:: iterator IT = MP.inizio(); Esso != mp.FINE(); It ++)
cout << it->Primo << " => " << it->secondo << endl;
restituzione 0;
L'output è:
plum => viola
Blackberry => blu scuro-nero
Watermelon => Green
albicocca => arancione
papaya => arancione
banana => giallo
non motorizzato da letterali a stringa, ma ordinati da puntatori. Per utilizzare una mappa in un programma C ++, la libreria delle mappe deve essere inclusa con una direttiva include.
Un altro modo di creare la mappa semplice sopra è il seguente:
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geograficamp ("plum", "viola", "blackberry", "scuro blu-nero", "watermelon", "verde", "albicocca", "arancione" "papaya" , "Orange", "Banana", "Yellow");
per (mappa:: iterator IT = MP.inizio(); Esso != mp.FINE(); It ++)
cout << it->Primo << " => " << it->secondo << endl;
restituzione 0;
L'output è:
plum => viola
Blackberry => blu scuro-nero
Watermelon => Green
albicocca => arancione
papaya => arancione
banana => giallo
Drasso da letterali a stringa, sebbene ordinato dai puntatori. Se i tasti fossero numeri interi, l'output sarebbe stato ordinato per chiavi. In pratica, le chiavi di molte mappe sono letterali stringhe. Questo articolo spiega come le chiavi dei letterali di stringa possono ordinare una mappa.
Contenuto dell'articolo
Ordina durante la creazione
Il modello completo per la costruzione della mappa è:
modello, Classe Allocator = allocatore >> mappa di classe;
Le classi, confronta e allocatore, hanno valori predefiniti. Cioè, hanno una specializzazione predefinita, che non deve essere digitata nelle dichiarazioni della mappa (istanziazioni). Ciò che è interessante qui è la classe di confronto. Il nome della classe è confrontato e la specializzazione predefinita è "inferiore". "meno Una mappa viene normalmente creata ordinata per chiavi durante la creazione. Se le chiavi sono const char*, allora i puntatori delle stringhe letterali citate verranno ordinati, non i testi letteli. Per avere stringhe come tasti ordinati durante la creazione, le stringhe devono essere letterali di oggetti stringa istanziati dalla classe stringa. Ciò significa che la libreria di stringhe deve essere inclusa, così come la libreria delle mappe. Creare ascendente Nel seguente programma, la mappa viene creata, ordinata in ascesa: L'output è: Anche se meno fossero omessi dal modello, l'ordinamento sarebbe comunque salito perché meno è il valore predefinito. Creando discendenza Per creare una mappa, in modo tale che sia ordinata in ordine decrescente per chiavi, la specializzazione di confronto deve essere codificata. Il seguente programma illustra questo: L'output è: Producendo una gamma che discende Una gamma di una mappa può essere prodotta in ordine decrescente. Ciò comporta la creazione di una seconda mappa, che è un intervallo dalla prima mappa. Il seguente programma illustra questo: L'output è: Il primo oggetto Map ha sei elementi che sono: La gamma considerata è: Nel codice, "ITB ++" punta a "banana", "giallo" e "ite-" punta a "Watermelon", "Green" per l'intervallo. Quando si gestiscono un intervallo in C ++, l'elemento finale non è coinvolto nella manipolazione. E così l'output ha quattro elementi con "Watermelon", "Green" omesso. La specializzazione del parametro del modello di confronto della seconda mappa è maggiore. Se fosse meno o omesso, l'intervallo avrebbe portato all'ordine ascendente. Confrontare due elementi per chiave key_compare key_comp () const Questa funzione membro restituisce una copia dell'oggetto di confronto utilizzato dal contenitore della mappa per confrontare le chiavi. Un oggetto di confronto è un oggetto funzione. Ci vorrebbero due chiavi come argomenti e ritornano vero se la chiave sinistra è inferiore a destra. Con ciò, il segmento del codice dovrebbe essere: key_compare non è riconosciuto dal compilatore. Eliminare key_compare in questo segmento di codice, sostituendo KC nella seconda istruzione, si traduce in: Il seguente programma illustra l'uso di key_comp (). L'output è 0 per false. Il vero problema con il segmento di codice sopra è che lo spazio dei nomi per key_compare, non è stato ben espresso. Se il segmento era, Avrebbe funzionato (accettato dal compilatore). value_compare value_comp () const Questa funzione membro è simile a KEY_COMP (). Nota: qui, non è il valore della coppia chiave/valore a cui si fa riferimento; è l'elemento della coppia chiave/valore. Quindi, i due argomenti per l'oggetto funzione value_compare sono elementi iterator. Il seguente programma utilizza valori_comp (), confrontando il primo e l'ultimo elementi, "Apricot", "Orange" e "Watermelon", "Green": L'output è 1, per vero. Gli iteratori ITB e Ite erano dereferenziati di avere i loro elementi, con l'operatore indirezione. Ordinamento della mappa creata con l'elenco iniziale Nel seguente programma, in cui è decrescente l'ordinamento, i tasti sono oggetti stringa, istanziati dalla classe String: L'output è: Conclusione Una mappa viene creata ordinata per chiavi, ascendente. Ascendente è l'ordine predefinito. Per distinguerlo, aggiungi la specializzazione dei parametri del modello, maggiore come terzo argomento, nell'elenco degli argomenti del modello. Nota: se le chiavi sono stringhe, devono essere istanziate dalla classe String, come illustrato sopra. Tasti di stringa come const-car* o char-arr [], finiscono con i loro puntatori ordinati e non i loro letterali. #includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geografica
mp ["plum"] = "viola";
mp ["blackberry"] = "blu scuro-nero";
mp ["Watermelon"] = "Green";
mp ["albicocca"] = "arancione";
MP ["Papaya"] = "Orange";
mp ["banana"] = "giallo";
per (mappa
cout << it->Primo << " => " << it->secondo << endl;
restituzione 0; albicocca => arancione
banana => giallo
Blackberry => blu scuro-nero
papaya => arancione
plum => viola
Watermelon => Green #includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geografica
mp ["plum"] = "viola";
mp ["blackberry"] = "blu scuro-nero";
mp ["Watermelon"] = "Green";
mp ["albicocca"] = "arancione";
MP ["Papaya"] = "Orange";
mp ["banana"] = "giallo";
per (mappa
cout << it->Primo << " => " << it->secondo << endl;
restituzione 0; Watermelon => Green
plum => viola
papaya => arancione
Blackberry => blu scuro-nero
banana => giallo
albicocca => arancione #includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geografica
mp ["plum"] = "viola";
mp ["blackberry"] = "blu scuro-nero";
mp ["Watermelon"] = "Green";
mp ["albicocca"] = "arancione";
MP ["Papaya"] = "Orange";
mp ["banana"] = "giallo";
carta geografica
ITB ++;
carta geografica
ite--;
carta geografica
per (mappa
cout << it->Primo << " => " << it->secondo << endl;
restituzione 0; plum => viola
papaya => arancione
Blackberry => blu scuro-nero
banana => giallo albicocca => arancione
banana => giallo
Blackberry => blu scuro-nero
papaya => arancione
plum => viola
Watermelon => Green banana => giallo
Blackberry => blu scuro-nero
papaya => arancione
plum => viola
Watermelon => Green key_compare kc = mp.key_comp ();
bool bl = kc ("anguria", "albicocca"); bool bl = mp.key_comp () ("Watermelon", "Albicoch");
#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geografica
mp ["plum"] = "viola";
mp ["blackberry"] = "blu scuro-nero";
mp ["Watermelon"] = "Green";
mp ["albicocca"] = "arancione";
MP ["Papaya"] = "Orange";
mp ["banana"] = "giallo";
bool bl = mp.key_comp () ("Watermelon", "Albicoch");
cout << bl << endl;
restituzione 0; carta geografica
bool bl = kc ("anguria", "albicocca"); #includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geografica
mp ["plum"] = "viola";
mp ["blackberry"] = "blu scuro-nero";
mp ["Watermelon"] = "Green";
mp ["albicocca"] = "arancione";
MP ["Papaya"] = "Orange";
mp ["banana"] = "giallo";
carta geografica
carta geografica
ite--;
carta geografica
bool bl = vc ( *Itb, *ite);
cout << bl << endl;
restituzione 0; #includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()
carta geografica
per (mappa
cout << it->Primo << " => " << it->secondo << endl;
restituzione 0; Watermelon => Green
plum => viola
papaya => arancione
Blackberry => blu scuro-nero
banana => giallo
albicocca => arancione