Estaba escribiendo un algoritmo esta mañana y me encontré con una situación curiosa. Tengo dos std::map
s. Quiero realizar una intersección de conjuntos en los conjuntos de las claves de cada uno (para encontrar qué teclas son comunes a ambos mapas). En algún momento en el futuro, creo que es probable que también quiera realizar la resta del set aquí. Afortunadamente, el STL incluye funciones para ambas operaciones. El problema es que parece que no puedo obtener un std::set
de las claves de std::map
. ¿Hay alguna manera de hacer esto? Estoy buscando algo que sería este sencillo, como lo es en Java:cómo puedo obtener un estándar :: conjunto de claves para un estándar :: map
std::set<Foo> keys = myMap.getKeySet();
Mi opinión es que no puedo utilizar la función std::set_intersection()
directamente sobre iteradores en los mapas porque los mapas exponen objetos en lugar std::pair
de solo llaves. Además, no creo que el mapa garantice el orden. También estoy interesado en realizar esta misma operación en un par de std::multimap
s, si eso hace alguna diferencia.
EDITAR: Olvidé mencionar que inicialmente debido a la antigüedad del compilador que estoy obligado a utilizar (MSVC++ 6), la mayoría de los trucos ingeniosos plantilla que están disponibles en el impulso no se puede utilizar.
No sea tan rápido para darse por vencido en MSVC++ 6 - vea esta pregunta http://stackoverflow.com/questions/252492/whats-the-latest-version-of-boost-compatible-with-vc6 –
Mapa mantiene las claves en orden –