Ciao di nuovo,
voglio in primis ringraziarti per le tue risposte complete, sei stato preziosissimo alla mia causa..ihihihih... ti spiego cosa ho fatto perchè c'è ancora qualcosa che non va:

ho definito come appunto tu mi hai detto una funzione apposta per il confronto:
template <typename T, int MassimaDimensioneDelloArray>
struct MyArrayCompare {
bool operator()(T a, T b) {
return (a[0] < b[0]);
}
};

dopo di che ho definito come variabile globale(quindi accessibile ad ogni procedura):
map<int*,DataMsg,MyArrayCompare <int*,3> > mp;

dove (int *) è la mia chiave formata appunto da quel famoso array di tre elementi e DataMsg è l'oggetto che devo memorizzare associato a quella chiave quindi come secondo elemento non ho più una stringa ma un'oggetto.

A questo punto ho definito una procedura che mi salva i valori nella struttura e che prende in input il valore di DataMsg che mi deve salvare, quindi "packdata" che vedi come parametro rappresenta proprio DataMsg

void saveMessage(*packdata){

int current[3] = {packdata->getCur(0),packdata->getCur(1),packdata->getCur(2)}

mp.insert(make_pair(current,packdata->getData()));

for( map<int*,SmallNetDataMsg,MyArrayCompare <int*,3>>::iterator ii=mp.begin(); ii!=mp.end(); ++ii){
cerr <<"Node datas into Hash : node "<<current[0] << "timestmp :" << (*ii).first[2] << " data :" << (*ii).second.getSd() << endl;
}
}

Effettivamente funziona nel senso che li salva all'interno della struttura, ma il problema ora è che l'ultimo elemento inserito in map viene inserito correttamente, quelli invece precedentemente salvati li vedo visualizzati con valori di chiave casuali.... ossia per esser più chiaro current[0],current[1],current[2] assumono deivalori strani tipo:"123452" ecc.. come se current una volta memorizzato cambiasse valore...Ma che significa?