Attento alla dichiarazione:
codice:
map< vector<int>,DataMsg,MyArrayCompare <vector<int> >>::iterator elem;
gli attuali compilatori (col prossimo standard la cosa dovrebbe risolversi) interpretano le due angolari rosse come operatore >> non come dichiarazione di template.
Basta separarle da uno spazio e risolvi il problema.
codice:
map< vector<int>,DataMsg,MyArrayCompare <vector<int> > >::iterator elem;
Ti consiglio comunque di fare un typedef della dichiarazione:
1) per evitare errori di sintassi
2) per semplificarti la vita.
codice:
// Questo va messo prima della dichiarazione della mappa globale.
typedef map< vector<int>,DataMsg,MyArrayCompare <vector<int> > > MyMap;
MyMap mp; // mappa globale.
// in seguito, se serve
MyMap::iterator elem
// etc.
Ultima cosa.
Nel functor ho messo
codice:
std::size_t maxComparingSize = std::min(a.size(),b.size());
in caso serva ciclare tra gli elementi del vector (che può non essere vincolato a soli 3 elementi)
e non oltrepassare i limiti.
Se sai già che la locazione è valida e non ti serve un ciclo for, puoi anche ometterla.