Попробовать сделать map<int*, CMyClass>? К сожалению проверить негде.
Одно НО: при таком добавлении, как у тебя приведено, после выхода c[] за пределы видимости в MyMap будет содержаться лабуда (ты реально в него добавляешь всего лишь указатель на int). Выход — использовать std::vector:
Здравствуйте, Аноним, Вы писали:
А>есть std::map<int[3], CMyClass> А>как можно добавить определенную пару key-value? "int c[3]; MyMap[c] = MyValue;" естественно не работает
Элемент этого map имеет тип std::pair<int[3], CMyClass>, а ни конструктора, ни оператора присваивания по умолчанию для int[3] нет, поэтому у std::pair<int[3], CMyClass> тоже их нет.
Используй std::map<std::vector<int>, CMyClass>
Здравствуйте, Аноним, Вы писали:
А>есть std::map<int[3], CMyClass> А>как можно добавить определенную пару key-value? "int c[3]; MyMap[c] = MyValue;" естественно не работает
А можно спросить — зачем?
Если вопрос чисто теоретический то лучше конечно через стд::вектор<инт> и передоставить свой вариант для стд::лесс<стд::вектор<инт> > который по умолчанию вызывает стд::лексографикал_компаре() — то есть как только слева на право читая елементы найдет а < б то тру. Вообщем надо определить сравнение ключей.
П.С. Вам действительно необходимо идентифицировать обьекты CMyClass-а с помощью 3-х инт-ов ???
Re[2]: ламерский вопрос по std::map
От:
Аноним
Дата:
08.05.05 14:49
Оценка:
Здравствуйте, AvDav, Вы писали:
AD>П.С. Вам действительно необходимо идентифицировать обьекты CMyClass-а с помощью 3-х инт-ов ???
Наверное это какие-нибудь координаты.
В общем действительно лучше завести отдельную структуру для таких вещей.
= MyValue;" естественно не работает
AD>А можно спросить - зачем?
AD>П.С. Вам действительно необходимо идентифицировать обьекты CMyClass-а с помощью 3-х инт-ов ???
Довольно редко такое нужно, например, typedef BYTE Guid[16] или матрица фиксированных размеров typedef double SimpleFilter[5][5].
Почти всегда это решается через какую-нибудь надстройку вроде
[c]
template <class T, int w, int h> class StaticArray;
или через объявление структуры.
Имхо это упущение языка, т.к.
int a[3], b[3];
a = b; // не компилируетсяstruct { int v[3]; } c, d;
c = d; // компилируется
Раз уж оператор присваивания по умолчанию умеет копировать массивы, то и типы Guid или SimpleFilter тоже вполне могли бы присваиваться.