example - multimap c++
¿Cuál es la diferencia entre std:: multimap<key, value> y std:: map<key, std:: set<value>> (4)
Descubrí que tienen una clave y múltiples valores que son únicos.
El multimap almacena pares de (clave, valor) donde tanto la clave como el valor pueden aparecer varias veces.
El map<key, set<value>>
solo almacenará cada valor una vez para una clave específica. Para hacer eso, tendrá que ser capaz de comparar los valores, no solo las claves.
Depende de su aplicación si los valores que se comparan son equivalentes, o si desea guardarlos por separado de todos modos. Quizás contienen campos que son diferentes pero no participan en la comparación del conjunto.
Este último requiere que los valores puedan ordenarse (ya sea a través del operator<
o una función de comparación), el primero no.
Un std::map
es un contenedor asociativo, que le permite tener una clave única asociada con su valor de tipo. Por ejemplo,
void someFunction()
{
typedef std::map<std::string, int> MapType;
MapType myMap;
// insertion
myMap.insert(MapType::value_type("test", 42));
myMap.insert(MapType::value_type("other-test", 0));
// search
auto it = myMap.find("test");
if (it != myMap.end())
std::cout << "value for " << it->first << " is " << it->second << std::endl;
else
std::cout << "value not found" << std::endl;
}
Un std::multimap
es igual a un std::map
, pero sus claves ya no son únicas. Por lo tanto, puede encontrar una variedad de artículos en lugar de solo encontrar un artículo único. Por ejemplo,
void someFunction()
{
typedef std::multimap<std::string, int> MapType;
MapType myMap;
// insertion
myMap.insert(MapType::value_type("test", 42));
myMap.insert(MapType::value_type("test", 45));
myMap.insert(MapType::value_type("other-test", 0));
// search
std::pair<auto first, auto second> range = myMap.equal_range("test");
for (auto it = range.first; it != range.second; ++it)
std::cout << "value for " << it->first << " can be " << it->second << std::endl;
}
std::set
es como un std::map
, pero no almacena una clave asociada a un valor. Almacena solo el tipo de clave, y le asegura que es único dentro del conjunto.
También tiene std::multiset
, que sigue el mismo patrón.
Todos estos contenedores proporcionan un acceso O (log (n)) con su rango de búsqueda / igualdad.
map::insert
Como map
contenedores de map
no permiten valores clave duplicados, la operación de inserción comprueba si cada elemento insertado ya existe otro elemento en el contenedor con el mismo valor de clave si es así, el elemento no se inserta y su valor asignado no cambia de ninguna manera .
por otra parte
multimap::insert
puede insertar cualquier cantidad de elementos con la misma clave.
http://www.cplusplus.com/reference/stl/map/
http://www.cplusplus.com/reference/stl/multimap/