Insertar nuevos elementos en un mapa STL en C++
-
Utilice la función de miembro
insert
para agregar un nuevo elemento astd::map
en C++ -
Utilice la función de miembro
insert_or_assign
para agregar un nuevo elemento astd::map
en C++ -
Utilice la función de miembro
emplace
para agregar un nuevo elemento astd::map
en C++ -
Utilice la función miembro
emplace_hint
para agregar un nuevo elemento astd::map
en C++
Este artículo explicará varios métodos de cómo agregar nuevos elementos en el objeto std::map
en C++.
Utilice la función de miembro insert
para agregar un nuevo elemento a std::map
en C++
El contenedor STL map
proporciona una estructura de datos para almacenar pares clave-valor como elementos, ordenados automáticamente tras la inserción o inicialización. Se pueden agregar nuevos elementos a un objeto std::map
usando varios métodos, el más común de los cuales es la función insert
.
La función miembro insert
tiene múltiples sobrecargas. Aún así, el más simple toma solo un único argumento que especifica la referencia const
al objeto insertado. Otra sobrecarga puede aceptar una referencia de valor r y usar el comando std::forward
para construir un elemento en el lugar, como se muestra en el siguiente código de muestra.
La última sobrecarga devuelve un par del iterador al elemento insertado y el valor bool
, lo que indica una inserción exitosa. También demostramos una sobrecarga de la función insert
que toma una lista de valores-clave similar a la lista del inicializador y construye elementos a partir de los valores. Sin embargo, esta sobrecarga no tiene un tipo de retorno.
#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 = {
{"h", "htop"},
{"k", "ktop"},
};
auto ret = m1.insert({"k", "ktop"});
ret.second ? cout << "Inserted" : cout << "Not Inserted";
cout << "\n";
m1.insert({{"k", "ktop"}, {"p", "ptop"}});
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
Not Inserted
h : htop;
k : ktop;
p : ptop;
Utilice la función de miembro insert_or_assign
para agregar un nuevo elemento a std::map
en C++
El estándar C++ 17 más nuevo proporciona una función miembro llamada insert_or_assign
, que inserta un nuevo elemento en un mapa si la clave dada aún no existe. De lo contrario, la función asignará el nuevo valor al elemento con la clave existente.
La función tiene varias sobrecargas, pero la llamada en el siguiente ejemplo toma dos argumentos como referencias de valor r a una clave y un valor. Esta sobrecarga también devuelve un par de iterador y un valor bool
. Observe que verificamos el estado de la inserción con un operador condicional e imprimimos los mensajes correspondientes.
#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 = {
{"h", "htop"},
{"k", "ktop"},
};
auto ret = m1.insert_or_assign("p", "ptop");
ret.second ? cout << "Inserted" : cout << "Assigned";
cout << "\n";
ret = m1.insert_or_assign("t", "ttop");
ret.second ? cout << "Inserted" : cout << "Assigned";
cout << "\n";
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
Inserted
Inserted
h : htop;
k : ktop;
p : ptop;
t : ttop;
Utilice la función de miembro emplace
para agregar un nuevo elemento a std::map
en C++
Otra función miembro proporcionada con el contenedor std::map
es emplace
. Esta función proporciona eficiencia en contraste con la función insert
ya que no requiere copiar los valores de los argumentos. Por el contrario, la función emplazamiento
construirá el elemento en el lugar, lo que significa que los parámetros dados se reenvían al constructor de la clase. Tenga en cuenta que, dependiendo de los argumentos, se llamará al constructor correspondiente.
#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 = {
{"h", "htop"},
{"k", "ktop"},
};
auto ret = m1.emplace("t", "ttop");
ret.second ? cout << "Inserted" : cout << "Not Inserted";
cout << endl;
ret = m1.emplace(std::make_pair("t", "ttop"));
ret.second ? cout << "Inserted" : cout << "Not Inserted";
cout << endl;
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
Inserted
Not Inserted
h : htop;
k : ktop;
t : ttop;
Utilice la función miembro emplace_hint
para agregar un nuevo elemento a std::map
en C++
Alternativamente, se puede utilizar la función miembro emplace_hint
para insertar un nuevo elemento en un mapa con un parámetro adicional llamado hint
, que especifica una posición en la que la operación debe comenzar a buscar. Devolvería un iterador al elemento recién insertado si el proceso fuera exitoso. De lo contrario, se devuelve el iterador del elemento existente con la misma clave.
#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 = {
{"h", "htop"},
{"k", "ktop"},
};
auto ret = m1.emplace_hint(m1.begin(), "t", "ttop");
m1.emplace_hint(ret, "m", "mtop");
m1.emplace_hint(m1.begin(), "p", "ptop");
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
h : htop;
k : ktop;
m : mtop;
p : ptop;
t : ttop;
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