Che non puoi usare un array grezzo come chiave della map se non crei una funzione per il confronto. Inoltre non puoi usare direttamente un array, ma solo il puntatore.
Per capirsi:
codice:
int val1[3] = {0,1,2};
int val2[3] = {1,2,3};
map<int[3],string> mp;
mp.insert(make_pair(val1,string("1")));
mp.insert(make_pair(val2,string("2")));
Non compila.
codice:
int val1[3] = {0,1,2};
int val2[3] = {1,2,3};
map<int*,string> mp;
mp.insert(make_pair(val1,string("1")));
mp.insert(make_pair(val2,string("2")));
invece si.
Però così non vengono confrontati gli array, ma solo il valore del puntatore al primo elemento, in questo modo:
non
codice:
(*key1) < (*key2)
o
key1[0] < key2[0]
Per un simile confronto, devi fare una funzione ( o meglio ancora un functor) apposta.
Il mio consiglio è di fare qualcosa del genere:
codice:
template <typename T, int MassimaDimensioneDelloArray>
struct MyArrayCompare {
bool operator()(T a, T b) {
// implementazione del contronto tra array
// ad esempio.
return (a[0] < b[0]);
}
};
int main() {
int val1[3] = {0,1,2};
int val2[3] = {1,2,3};
map<int*,string,MyArrayCompare <int*,3> > mp;
mp.insert(make_pair(val1,string("1")));
mp.insert(make_pair(val2,string("2")));
};