Así que tengo 2 std::map
s <string, shared_ptr<file> >
uno es 'viejo' es 'nuevo' Quiero obtener qué archivos fueron eliminados y por lo tanto ser capaz de iterar thrue differene y hacer algunas cosas a shared_ptr. ¿Es eso posible y cómo hacerlo?Cómo restar una lista de claves de mapa de otra y obtener un mapa nuevo (mapa A - mab B = mapa C)
Respuesta
Si bien es bastante fácil escribir esto usted mismo (iterar sobre A
y verificar si la clave está presente en B
), esto parece un trabajo para std::set_difference
. Vamos a necesitar una lambda o algún predicado a medida para comparar claves, sin embargo:
#include <iterator>
#include <map>
#include <string>
#include <algorithm>
typedef std::map<std::string, MyPtr> my_map;
my_map A; // given
my_map B; // given
void make_a_difference()
{
my_map C; // will hold the result
std::set_difference(A.begin(), A.end(),
B.begin(), B.end(),
std::insert_iterator<my_map>(C, C.end()),
[](const my_map::value_type & a, const my_map::value_type & b)
{ return a.first < b.first; }
);
}
Si desea escribir usted mismo, usted debe considerar aprovechando el hecho de que ambas gamas ya están ordenados, por lo que podemos hacer mejor que una búsqueda plana de existencia avanzando dos iteradores en paralelo.
Si usted no tiene C++ 11, sólo tiene que utilizar este predicado en lugar de la lambda:
bool my_comp(const my_map::value_type & a, const my_map::value_type & b)
{
return a.first < b.first;
}
Cuidado con que no hay comparación del tipo de mapeado! Entonces, si tiene la misma clave de cadena en ambos mapas, entonces no habrá tal elemento en el resultado, incluso si los dos valores asignados difieren. Si esto no es deseable, necesita un contenedor de salida diferente (por ejemplo, un std::multimap<my_map::key_type, my_map::mapped_type>
) y un predicado diferente.
- 1. Cómo inicializar correctamente el Mapa de Mapa de Mapa?
- 2. ¿Cómo adjuntar los contenidos de un mapa a otro mapa?
- 3. ¿Cómo devolver una lista de claves desde un mapa hash?
- 4. ¿Cómo eliminar varias claves de un mapa?
- 5. Mapa de claves múltiples en C++
- 6. ¿Cómo serializar un mapa de un mapa con GSON?
- 7. Dissoc varias claves descendientes de un mapa?
- 8. Intercambiando claves y valores de un mapa en C++
- 9. Mapa de Punteros versus Mapa de Estructuras/Contenedores (C++)
- 10. ¿Cuál es la diferencia entre Bitmap.Clone() y el nuevo mapa de bits (mapa de bits)?
- 11. conjunto múltiple, mapa y mapa hash complejidad
- 12. Mapa de funciones C++
- 13. Preservar los valores de mapa de bits al crear un nuevo mapa de bits desde System.Drawing.Image
- 14. Desestructurar un mapa en otro mapa?
- 15. Copiar std :: mapa de datos a otro mapa
- 16. Puntero a un mapa
- 17. C# matriz Mapa/Recoge
- 18. ¿Cómo puedo ordenar las claves de un mapa en Java?
- 19. Eliminar una clave de un mapa C++
- 20. ¿Cómo se convierte una lista de números en un mapa?
- 21. C++ mapa de funciones aplicación
- 22. reestructuración Mapa
- 23. mapa de Java con claves duplicadas
- 24. C++ const acceso a elemento de mapa
- 25. ¿Un mapa bidireccional en clojure?
- 26. Hadoop Mapa/Reducir vs Mapa incorporado/Reducir
- 27. copiar el contenido de un mapa inmutable al nuevo mapa mutable
- 28. iterar sobre un mapa y llamar a una función que borre otros elementos es el mapa
- 29. función de mapa en Erlang
- 30. Cómo intercambiar claves y valores en un Mapa elegantemente
Eche un vistazo a '' 'std :: set_difference'''. –