Ciao Shodan,
il problema che ti ho riportato, non era risolvibile ponendo uno spazio tra i ">>", ho provato infatti a mettere uno spazio tra i due segni e il risultato non cambia...
Per chiarezza voglio riportarti l'errore del compilatore:

codice:
eror C3848:espressione con tipo 'const MyArrayCompare<T> 
deve perdere alcuni qualificatori const-volatile per poter chiamare 
'bool MyArrayCompare<T>::operator()(const T&,const T&)'
with
[
   T=std::vector<int>
]
......
Tu ci capisci qualcosa?
Per esser più sicuro ho voluto far una prova, ho tolto nuovamente nella definizione di map il riferimento a MyArrayCompare e le cose sembrano funzionare...

codice:
typedef  map< vector<int>,DataMsg> MyMap;
tengo a precisare che l'errore viene sollevato in corrispondenza della riga di "find" ossia:
codice:
elem = mp.find(key);