Use um contêiner de mapa STL em C++
-
Use
std::map
para declarar um objeto Map Container em C++ -
Use a função de membro
find
para pesquisar um elemento específico em um mapa em C++ -
Use a função de membro
insert
para armazenar um elemento em um mapa em C++ -
Use a função de membro
merge
para unir elementos de dois objetos de mapa em C++
Este guia mostrará vários métodos de como usar o contêiner de mapa STL em C++.
Use std::map
para declarar um objeto Map Container em C++
O contêiner std::map
implementa uma estrutura de dados de par chave-valor classificada, onde as chaves são únicas. Os valores-chave classificam os elementos do par em ordem crescente por padrão; entretanto, o usuário pode opcionalmente passar uma função de comparação para o modelo std::map
. Você pode inicializar o objeto map
com uma lista de valores onde cada elemento é especificado em colchetes separados. Nesse caso, criamos um mapa de pares de strings
e, em seguida, imprimimos os elementos dele no fluxo cout
. Observe que cada elemento é acessado como membros std::pair
no loop for
.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
printMap(m1);
return EXIT_SUCCESS;
}
Resultado:
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Use a função de membro find
para pesquisar um elemento específico em um mapa em C++
A função de membro find
é útil para pesquisar um par de valores-chave específico no contêiner map
. A operação de pesquisa tem complexidade logarítmica. A função find
leva a referência a uma chave e retorna o iterador para o elemento com a chave equivalente. Quando nenhum elemento é encontrado com a chave fornecida, um iterador ultrapassado é retornado.
O fragmento de código a seguir demonstra como inicializar um novo contêiner map
com os iteradores de intervalo. Observe que o primeiro iterador é recuperado usando a função find
. Além disso, pode ser útil verificar a validade do iterador retornado.
#include <cassert>
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m2(m1.find("11700K"), m1.end());
printMap(m2);
auto ret = m1.find("11700K");
assert(ret != m1.end());
std::map<string, string> m3(ret, m1.end());
printMap(m3);
return EXIT_SUCCESS;
}
Resultado:
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Use a função de membro insert
para armazenar um elemento em um mapa em C++
Você pode adicionar novos elementos ao contêiner map
existente usando a função de membro insert
. O membro insert
leva a referência ao objeto a ser adicionado e retorna um contêiner std::pair
que consiste em um iterador para o elemento inserido e um valor bool
indicando o status da inserção bem-sucedida. Quando a inserção falha, o iterador aponta para o elemento que impediu a operação.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
auto ret1 = m1.insert({"1390P", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
ret1 = m1.insert({"1390", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
printMap(m1);
return EXIT_SUCCESS;
}
Resultado:
Not inserted !11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;
Use a função de membro merge
para unir elementos de dois objetos de mapa em C++
A função de membro merge
pode ser utilizada para unir os elementos de dois contêineres de mapa. É chamado a partir do objeto map
que precisa armazenar os elementos combinados e recebe outro map
como argumento. Após a operação, todos os ponteiros e referências aos elementos transferidos são válidos.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m4 = {
{"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};
m1.merge(m4);
printMap(m1);
return EXIT_SUCCESS;
}
Resultado:
11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook