Piero V.

Invertire chiavi e valori nelle map (C++)

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.

Risoluzione: da stringa a interi e viceversa in C++

Ho fatto due funzioni utili in C++. Servono per trasformare la stringa della risoluzione in numeri e viceversa.

Da numberi a stringa è stato molto facile, ho usato uno stringstream. In questo caso era la modalità più semplice, veloce ed elegante.

Il contrario era un po’ più difficile.

Ho usato sempre uno stringstream. Per la larghezza è bastato fare il contrario di quello che avevo fatto prima, però dovevo trovare il separatore prima di trovare l’altezza. Perciò ho fatto un while che fino a quando lo stream era buono continuava a prendere i char e se trovava x o * si fermava. Dopodiché trovare l’altezza era semplicissimo.

Avrei voluto aggiungere anche × ai separatori, però non era possibile perché non stava in un char.

Se volete vedere il codice che parla da solo eccolo qui: risoluzione.cpp.

Ovviamente potete farne quello che volete. Non è richiesto alcun tipo di credito per righe che tutti potrebbero fare.