Clase de contenedor de C++<map>
En C++,<map>es parte de la Biblioteca de Plantillas Estándar (STL), que proporciona un contenedor asociativo para almacenar pares clave-valor.
mapLos elementos del contenedor se ordenan automáticamente según el orden de las claves, lo que lo hace muy adecuado para escenarios que requieren búsqueda rápida y datos ordenados.
Definición y características
- Pares clave-valor:
mapAlmacena pares clave-valor, donde cada clave es única. - Ordenación:
mapLos elementos en él se ordenan automáticamente según el orden de las claves, normalmente en orden ascendente. - Unicidad: cada clave
mapsolo puede aparecer una vez en él. - Iterador bidireccional:
mapProporciona iteradores bidireccionales, que permiten recorrer los elementos hacia adelante y hacia atrás.
Sintaxis básica
Incluir el archivo de cabecera:
#include <map>
Declarar el contenedor map:
std::map<key_type, value_type> myMap;
key_typees el tipo de la clave.value_typees el tipo del valor.
Insertar elementos:
myMap[key] = value;
Acceder a elementos:
value = myMap[key];
Recorrer el map:
for (std::map<key_type, value_type>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << " => " << it->second << std::endl;
}
En el estándar C++11 y posteriores, la parte de recorrido se puede simplificar con un bucle for basado en rangos, haciendo el código más conciso:
for (auto &p : m) {
std::cout << p.first << " : " << p.second << std::endl;
}
Ejemplo
A continuación se muestra un ejemplo simple que usamap, crearemos unmappara almacenar los nombres y edades de los empleados, y recorrer estemappara imprimir el nombre y la edad de cada empleado.
Ejemplo
#include <string>
int main() {
// Crear un contenedor map para almacenar el nombre y la edad de los empleados
std::map<std::string, int> employees;
// Insertar información de los empleados
employees["Alice"] = 30;
employees["Bob"] = 25;
employees["Charlie"] = 35;
// Recorrer el map e imprimir la información de los empleados
for (std::map<std::string, int>::iterator it = employees.begin(); it != employees.end(); ++it) {
std::cout << it->first << " is " << it->second << " years old." << std::endl;
}
return 0;
}
Resultado de salida:
Alice is 30 years old. Bob is 25 years old. Charlie is 35 years old.
Uso avanzado
Comprobar si la clave existe:
if (myMap.find(key) != myMap.end()) {
// 键存在
}
Eliminar elementos:
myMap.erase(key);
Vaciar el map:
myMap.clear();
Obtener el tamaño del map:
size_t size = myMap.size();
Otros métodos:
myMap.empty(); // 是否为空
myMap.count("Bob"); // key 是否存在(返回 0 o 1)
Ordenación personalizada. Por defecto el orden es ascendente, se puede usar std::greater o una función de comparación personalizada:
std::map<int, std::string, std::greater<int>> m; // 降序
Usar una función de comparación personalizada:
Ejemplo
#include <string>
#include <functional>
bool myCompare(const std::string& a, const std::string& b) {
return a < b;
}
int main() {
std::map<std::string, int, std::function<bool(const std::string&, const std::string&)>> myMap(myCompare);
// Otras operaciones...
return 0;
}
map es un contenedor muy útil en C++ STL, especialmente adecuado para escenarios que requieren búsqueda rápida y datos ordenados.
Ejemplo
#include <map>
#include <string>
int main() {
std::map<std::string, int> scores;
// Insertar
scores["Alice"] = 90;
scores["Bob"] = 85;
scores.insert({"Charlie", 92});
// Recorrer
for (auto &p : scores) {
std::cout << p.first << " => " << p.second << std::endl;
}
// Buscar
auto it = scores.find("Bob");
if (it != scores.end()) {
std::cout << "Bob's score: " << it->second << std::endl;
}
// Eliminar
scores.erase("Alice");
std::cout << "Size: " << scores.size() << std::endl;
return 0;
}
Resultado de ejecución (ordenado automáticamente por clave):
Alice => 90 Bob => 85 Charlie => 92 Bob's score: 85 Size: 2Otras extensiones