Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 14-03-2013 16:32 » |
|
поскольку мультимап позволяет хранить повторные ключи (и это нужно) , то возникает ситуация с повторными пАрами (при повторной вставке одного и того же value_type) , то есть 0->0 0->7 1->2 // 1->2 //повтор! 2->7 8->9
есть ли штатный способ вставки, чтобы такая повторная пара не записалась, или же сначала нужно чистить контейнер от всех "1->2" , а только потом вставлять ?
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #1 : 14-03-2013 16:56 » |
|
Проверку делай. Либо сделай каскад из map — этакий двумерный ассоциативный массив. Еще можно включить значение в состав ключа: typedef struct _mykey { int a; int b; _mykey(a, b) { this->a = a; this->b = b; } } mykey;
typedef std::map<mykey, int> myasoc;
myasoc a; a[mykey(0, 0)] = 0; a[mykey(0, 1)] = 1; a[mykey(0, 1)] = 1; // затираем старое
|
|
« Последнее редактирование: 14-03-2013 17:02 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 14-03-2013 17:00 » |
|
ну, в принципе, да, можно же найти - если есть такой ключ, а значение тоже такое же, то просто не вставлять. Правда, нет гарантии очистки, если перед этим уже было накосячено. Но это уже другой вопрос)
насчёт каскада - не понял. Я тогда в нём потом замучаюсь значение по ключу искать , лучше уж первый вариант
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #3 : 14-03-2013 17:02 » |
|
Выше еще вариант. Правда в таком случае затруднительно получить список значений по первому параметру.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 14-03-2013 17:06 » |
|
>>включить значение в состав ключа тут тоже не очень удобно - ведь придётся определить оператор <, который в сравнении будет рассматривать только (a) - ведь по нему должна быть сортировка. Поэтому, поиск придётся производить тупо циклом, а не штатным методом find Добавлено через 1 минуту и 13 секунд:ну тут, в общем, понятно, что перед вставкой нужно проверку сделать. Просто я думал, что есть уже такой волшебный insert
|
|
« Последнее редактирование: 14-03-2013 17:07 от Алексей1153 »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #5 : 14-03-2013 17:11 » |
|
насчёт каскада - не понял. Я тогда в нём потом замучаюсь значение по ключу искать , лучше уж первый вариант
typedef std::map<int, int> mapIntInt; typedef std::map<int, myarr> mapIntIntInt;
mapIntIntInt a; a[0][0] = 0; a[0][1] = 1; a[0][1] = 1; // перезапись
// a[0] дает mapIntInt с ключами 0 и 1 Добавлено через 2 минуты и 3 секунды:ну тут, в общем, понятно, что перед вставкой нужно проверку сделать. Просто я думал, что есть уже такой волшебный insert multimap<a,b> эквивалентен map<a, list<b>>.
|
|
« Последнее редактирование: 14-03-2013 17:15 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 14-03-2013 17:22 » |
|
Ром, а смотри в мультимапе ключ можно и нужно повторять. Мне нужна неповторность ПАРЫ вот такой вариант набора валиден для меня: std::multimap<0,0> std::multimap<0,7> std::multimap<1,2> std::multimap<2,7> std::multimap<2,9> а с твоим вариантом 1) std::map<0, std::map<0,0 >> //затрётся std::map<0, std::map<0,7 >> std::map<1, std::map<1,2 >> std::map<2, std::map<2,7 >> //затрётся std::map<2, std::map<2,9 >> 2) map<0, list<0>> //затрётся map<0, list<7>> map<1, list<2>> map<2, list<7>> //затрётся map<2, list<9>>
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #7 : 14-03-2013 17:27 » |
|
Как-то ты странно пишешь... std::map<int, std::map<int, int>> a;
a[0][0] = 0; a[0][0] = 0; a[0][1] = 1; Соседи друг другу не мешают. Дублирующих пар нет.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 14-03-2013 17:43 » |
|
всё, мыслю понял, спасибо ) Чот я затупил немного
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 14-03-2013 17:47 » |
|
там даже с set лучше std::map<int, std::set<int> > a;
a[0].insert(0); a[0].insert(7); a[1].insert(2); a[1].insert(2); a[1].insert(2); a[2].insert(7); a[2].insert(9);
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #10 : 14-03-2013 18:28 » |
|
Я как-то про set не вспомнил. Конечно, зачем лишний компонент.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|