Se la mappa è globale, anche gli array devono esserlo, altrimenti spariscono quando vanno fuori scope e i puntatori diventano non più validi.
Per evitare situazioni del genere devi usare un vector (semplificando anche il functor) :
in alternativa, se il tuo compilatore supporta il nuovo std::tr1::array<>, puoi usare quello al posto del vector.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[0] < b[0]); } }; map< vector<int>,string,MyArrayCompare <vector<int> > > mp; int main() { int val1[3] = {0,1,2}; int val2[3] = {1,2,3}; vector<int> v1(&val1[0],&val1[3]); vector<int> v2(&val2[0],&val2[3]); mp.insert(make_pair(v1,string("1"))); mp.insert(make_pair(v2,string("2"))); };
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[0] < b[0]); } }; map< std::tr1::array<int,3>,string,MyArrayCompare <std::tr1::array<int,3> > > mp; int main() { std::tr1::array<int,3> val1 = {0,1,2}; std::tr1::array<int,3> val2 = {1,2,3}; mp.insert(make_pair(val1,string("1"))); mp.insert(make_pair(val2,string("2"))); };

Rispondi quotando