| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как запихнуть в контейнер более одного елемента? |
| Автор: NiCketT 27.5.2008, 10:38 | ||
Не пойму одну фишку. Добавляю елемены в контейнер, а .size() постоянно показывает только один елемент
Матрицы и числа разные, а в множество ни то, ни другое, не добавляется. Почему? http://paste.org/index.php?id=2939 |
| Автор: vinter 27.5.2008, 11:00 |
| так ты добавляешь только один элемент, вот тебе один и добавляется. |
| Автор: bsa 27.5.2008, 14:39 |
| NiCketT, ты знаешь, что в std::set нельзя поместить более одного одинакового объекта? Более того, для корректной его работы нужно, чтобы для классов хранимых объектов был определен operator<. |
| Автор: NiCketT 27.5.2008, 14:49 |
| bsa, неи, не знал. мне надо чтоб матрицы записывались в какойто контейнер с отброской повторений. Я так думал set это какраз такой (нато оно й множество, чтоб повторение отбрасывать) Дальше както следует сделать сортировку этих матриц по одном из двух ключей - unsigned prod и unsigned cost. Как это лучше организовать? |
| Автор: bsa 27.5.2008, 15:02 |
| NiCketT, я тебе и написал, что std::set хранит только одну копию объекта. Т.е. если ты имеешь два равных матрицы и их запихаешь в std::set, то в нем окажется только одна. std::set хранит данные в уже отсортированном виде (используется operator<). operator< используется и для выявления равных объектов. Если тебе нужно сортировать как-то иначе, то используй копирование в вектор с последующей сортировкой (с использованием своего компаратора). |
| Автор: NiCketT 27.5.2008, 19:57 | ||
дык. так мне так и надо! и матрицы на вход поступают иногда разные. это показывает вызов функции ShowMatrix(m) |
| Автор: bsa 27.5.2008, 20:06 |
| NiCketT ТЫ КОРРЕКТНО РЕАЛИЗОВАЛ специализацию less<matrix>? |
| Автор: NiCketT 28.5.2008, 13:14 | ||
вот-такой пример работает. В чем там загвоздка?
|
| Автор: NiCketT 28.5.2008, 14:18 |
| Расчехлился - пропустил амперсанд в одном месте |