Veramente non so come ringraziarti sei stato veramente forte...
Voglo scusarmi per non aver taggato il codice, ma sono da poco iscritto a questo forum e diciamo che sono alle prime armi.. Non mancherò comunque in seguito.

Tornando a noi, penso di aver risolto il problema, sinceramente non ho capito perchè prima il salvataggio non funzionase, ma ho apportato qualche modifica:

codice:
template <typename T>
struct MyArrayCompare {
	bool operator()(const T& a, const T& b) {
               // massimo indice confrontabile, se serve
                std::size_t maxComparingSize = std::min(a.size(),b.size());
                // implementazione del contronto tra array
                // ad esempio.
		return (a[2] < b[2]);
	}
};
ho usato la definizione di map che mi avevi dato
codice:
map< vector<int>,DataMsg,MyArrayCompare <vector<int> >>  mp;
e infine ho modificato la funzione che salvava i dati, eliminando l'array, e facendo solo uso dei vector, in questo modo:

codice:
void saveMessage(*packdata){
    
    vector <int>v1(3);
    v1[0]=packdata->getCurrent(0);
    v1[1]=packdata->getCurrent(1);
    v1[2]=packdata->getCurrent(2);

    mp.insert(make_pair(v1,packdata->getData()));
faccio notare che non c'è nè localmente alla funzione nè globalmente la definizione dell'array una definzione dell'array int current[3] che avevo messo nel precedente codice e che a questo punto, come mi hai fatto notare, posso mettere tutto direttamente nel vector.
Infine vorrei spendere due parole per quel terzo campo della definizione completa di map, ho letto un pò sul web e anche con qualche esempio, ho capito che quello che mi permette di effettuare è un'inserimento ordinato dei miei elementi all'interno della struttura, nel mio caso posso imporre un'ordinamento secondo il terzo elemento che compare nell'array che forma la chiave (a[2] < b[2]).
Grazie Giuseppe.