Se as chaves forem constantes para caracteres, o mapa será classificado pelos principais indicadores, e não pelos literais de string-chave. Não é isso que ninguém quer. Considere os seguintes pares de frutas de chave/valores e suas cores externas:
"Plum" => "roxo"
"BlackBerry" => "escuro-preto"
"melancia" => "verde"
"Apricot", => "Orange"
"Papaya" => "laranja"
"banana" => "amarelo"
As frutas são as chaves, e as cores são os valores. Esta lista de elementos (pares de chave/valor) não é classificada. O programa a seguir cria um mapa desta lista como é e o exibe como é, não classificado por literais de string:
#incluir
#incluir
usando namespace std;
int main ()
mapaMP;
mp ["plum"] = "roxo";
MP ["BlackBerry"] = "Blue-preto escuro";
mp ["melancia"] = "verde";
MP ["Apricot"] = "Orange";
MP ["Papaya"] = "Orange";
MP ["banana"] = "amarelo";
para (mapa:: iterator it = MP.começar(); isto != MP.fim(); IT ++)
cout << it->primeiro << " => " << it->segundo << endl;
retornar 0;
A saída é:
Plum => roxo
BlackBerry => Blue-preto escuro
melancia => verde
damasco => laranja
Papaya => laranja
banana => amarelo
não classificado por literais de cordas, mas classificados por ponteiros. Para usar um mapa em um programa C ++, a biblioteca de mapas deve ser incluída com uma diretiva incluída.
Outra maneira de criar o mapa simples acima é a seguinte:
#incluir
#incluir
usando namespace std;
int main ()
mapaMP ("Plum", "Purple", "BlackBerry", "Dark Blue-Black", "Watermelon", "Green", "Apricot", "Orange", "Papaya" , "laranja", "banana", "amarelo");
para (mapa:: iterator it = MP.começar(); isto != MP.fim(); IT ++)
cout << it->primeiro << " => " << it->segundo << endl;
retornar 0;
A saída é:
Plum => roxo
BlackBerry => Blue-preto escuro
melancia => verde
damasco => laranja
Papaya => laranja
banana => amarelo
Unsorteado por literais de cordas, embora classificados por ponteiros. Se as chaves fossem números inteiros, a saída teria sido classificada por chaves. Na prática, as chaves de muitos mapas são literais de cordas. Este artigo explica como as chaves dos literais de cordas podem classificar um mapa.
Conteúdo do artigo
Classificar durante a criação
O modelo completo para a construção do mapa é:
modelo, Classe alocador = alocador >> mapa de classe;
As classes, comparam e alocador, têm valores padrão. Ou seja, eles têm especialização padrão, que não precisa ser digitada nas declarações do mapa (instanciações). O que é de interesse aqui é a classe de comparação. O nome da classe é comparado e a especialização padrão é "menos". "menos Um mapa é normalmente criado classificado por chaves durante a criação. Se as chaves forem const char*, os ponteiros para as cordas literais citadas serão classificadas, não os textos literais. Para ter cordas como chaves classificadas durante a criação, as cordas devem ser literais de objetos de string instanciados da classe String. Isso significa que a biblioteca de string deve ser incluída, bem como a biblioteca de mapas. Criando ascendente No programa a seguir, o mapa é criado, classificada ascendente: A saída é: Mesmo que menos fossem omitidos do modelo, a classificação ainda estaria subindo porque menos é o padrão. Criando descendência Para criar um mapa, de modo que seja classificado em ordem descendente por chaves, a especialização de comparação deve ser codificada. O programa a seguir ilustra o seguinte: A saída é: Produzindo um alcance descendo Uma variedade de um mapa pode ser produzida em ordem decrescente. Isso envolve a criação de um segundo mapa, que é um intervalo do primeiro mapa. O programa a seguir ilustra o seguinte: A saída é: O primeiro objeto de mapa tem seis elementos que são: O intervalo considerado é: No código, "Itb ++" aponta para "banana", "amarelo" e "ite-" apontam para "melancia", "verde" para o intervalo. Ao lidar com um intervalo em C ++, o elemento final não está envolvido na manipulação. E assim a saída tem quatro elementos com “melancia”, “verde” omitido. A especialização do parâmetro de modelo de comparação do segundo mapa é maior. Se fosse menor ou omitido, o intervalo teria resultado em ordem crescente. Comparando dois elementos por chave key_compare key_comp () const Esta função de membro retorna uma cópia do objeto de comparação usado pelo contêiner do mapa para comparar as teclas. Um objeto de comparação é um objeto de função. Levaria duas chaves como argumentos e retornaria verdadeiro se a chave esquerda for menor que a direita. Com isso, o segmento de código deve ser: key_compare não é reconhecido pelo compilador. Eliminando key_compare neste segmento de código, substituindo o KC na segunda declaração, resulta em: O programa a seguir ilustra o uso de key_comp (). A saída é 0 para false. O verdadeiro problema com o segmento de código acima é que o espaço para nome para key_compare não foi bem expresso. Se o segmento fosse, Teria funcionado (aceito pelo compilador). value_compare value_comp () const Esta função de membro é semelhante a key_comp (). Nota: Aqui, não é o valor do par de chaves/valor que é referido; É o elemento do par de chaves/valor. Portanto, os dois argumentos para o objeto de função value_compare são elementos de iterador. O programa a seguir usa value_comp (), ao comparar os primeiros e os últimos elementos, "Apricot", "Orange" e "Watermelon", "Green": A saída é 1, para verdadeiro. Os iteradores ITB e ITE foram desreferenciados de ter seus elementos, com o operador indiretivo. Classificação do mapa criado com a lista de inicializadores No programa a seguir, onde a classificação está descendo, as chaves são objetos de string, instanciados da classe String: A saída é: Conclusão Um mapa é criado classificado por chaves, ascendendo. Ascender é a ordem padrão. Para descer, adicione a especialização do parâmetro de modelo, maior como o terceiro argumento, na lista de argumentos de modelo. Nota: Se as chaves forem strings, elas devem ser instanciadas da classe String, como ilustrado acima. Chaves de cordas como const-char* ou char-arr [], acabam com seus ponteiros classificados e não seus literais. #incluir
#incluir
#incluir
usando namespace std;
int main ()
mapa
mp ["plum"] = "roxo";
MP ["BlackBerry"] = "Blue-preto escuro";
mp ["melancia"] = "verde";
MP ["Apricot"] = "Orange";
MP ["Papaya"] = "Orange";
MP ["banana"] = "amarelo";
para (mapa
cout << it->primeiro << " => " << it->segundo << endl;
retornar 0; damasco => laranja
banana => amarelo
BlackBerry => Blue-preto escuro
Papaya => laranja
Plum => roxo
melancia => verde #incluir
#incluir
#incluir
usando namespace std;
int main ()
mapa
mp ["plum"] = "roxo";
MP ["BlackBerry"] = "Blue-preto escuro";
mp ["melancia"] = "verde";
MP ["Apricot"] = "Orange";
MP ["Papaya"] = "Orange";
MP ["banana"] = "amarelo";
para (mapa
cout << it->primeiro << " => " << it->segundo << endl;
retornar 0; melancia => verde
Plum => roxo
Papaya => laranja
BlackBerry => Blue-preto escuro
banana => amarelo
damasco => laranja #incluir
#incluir
#incluir
usando namespace std;
int main ()
mapa
mp ["plum"] = "roxo";
MP ["BlackBerry"] = "Blue-preto escuro";
mp ["melancia"] = "verde";
MP ["Apricot"] = "Orange";
MP ["Papaya"] = "Orange";
MP ["banana"] = "amarelo";
mapa
ITB ++;
mapa
eu te--;
mapa
para (mapa
cout << it->primeiro << " => " << it->segundo << endl;
retornar 0; Plum => roxo
Papaya => laranja
BlackBerry => Blue-preto escuro
banana => amarelo damasco => laranja
banana => amarelo
BlackBerry => Blue-preto escuro
Papaya => laranja
Plum => roxo
melancia => verde banana => amarelo
BlackBerry => Blue-preto escuro
Papaya => laranja
Plum => roxo
melancia => verde key_compare kc = MP.key_comp ();
bool bl = kc ("melancia", "damasco"); bool bl = MP.key_comp () ("melancia", "damasco");
#incluir
#incluir
#incluir
usando namespace std;
int main ()
mapa
mp ["plum"] = "roxo";
MP ["BlackBerry"] = "Blue-preto escuro";
mp ["melancia"] = "verde";
MP ["Apricot"] = "Orange";
MP ["Papaya"] = "Orange";
MP ["banana"] = "amarelo";
bool bl = MP.key_comp () ("melancia", "damasco");
cout << bl << endl;
retornar 0; mapa
bool bl = kc ("melancia", "damasco"); #incluir
#incluir
#incluir
usando namespace std;
int main ()
mapa
mp ["plum"] = "roxo";
MP ["BlackBerry"] = "Blue-preto escuro";
mp ["melancia"] = "verde";
MP ["Apricot"] = "Orange";
MP ["Papaya"] = "Orange";
MP ["banana"] = "amarelo";
mapa
mapa
eu te--;
mapa
bool bl = vc ( *itb, *ite);
cout << bl << endl;
retornar 0; #incluir
#incluir
#incluir
usando namespace std;
int main ()
mapa
para (mapa
cout << it->primeiro << " => " << it->segundo << endl;
retornar 0; melancia => verde
Plum => roxo
Papaya => laranja
BlackBerry => Blue-preto escuro
banana => amarelo
damasco => laranja