Mi è capitato di dover invertire le chiavi con i valori delle mappe, così ho creato questo template:
#include <map>
#include <vector>
template <class oldkey, class oldvalue>
typename std::map< oldvalue, std::vector<oldkey> > reverse_map(typename std::map<oldkey, oldvalue> the_map)
{
std::map< oldvalue, std::vector<oldkey> > ret;
typename std::map<oldkey, oldvalue>::iterator it;
for(it = the_map.begin(); it != the_map.end(); it++) {
ret[it->second].push_back(it->first);
}
return ret;
}
Era il primo template che scrivevo. Comunque sembra che funzioni, ma se c’è qualcosa che non va scrivete nei commenti (però per favore non mangiatemi 😊 ).
Come al solito per queste cose, rilascio questo codice nel pubblico dominio.