![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| tararataka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 21.8.2010 Репутация: нет Всего: нет |
Мне нужно найти пару, первое поле которой совпадает с первым полем шаблона. Почему не срабатывает приведённый код? В найденном итераторе всегда оказывается первый элемент.
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| tararataka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 21.8.2010 Репутация: нет Всего: нет |
Да знаю я про map,
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
tararataka, чтобы заработало достаточно изменить строку:
Другое дело, конечно, что код ужасен. |
|||
|
||||
| tararataka |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 21.8.2010 Репутация: нет Всего: нет |
azesmcar
Короче мне нужно иметь один контейнер отсортированным различным образом, плюс нужно постоянно добавлять элементы в него. Ну и что-бы не извращаться, я решил все операции выполнять на различных контейнерах, состоящих из ссылок на одни и те-же элементы. А map сортируется только по первому значению, если я хочу по второму, то мне нужно свопнуть пару. Но сделать это нужно так, что-бы она оставалась одной и той же парой. Я х.з. как это сделать. ИванМ
Ох блин, я совсем про это не подумал. Да, теперь всё корректно.
Эээ. |
||||||
|
|||||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
1. использование vector не по назначению В vector'е при таких манипуляциях будет происходить перезапись элементов. Лучше использовать list - как раз для таких целей. 2. использование алгоритмов не по назначению - для вашей цели подошел бы find_if. 3. лучше вообще отказаться от указателей (при динамическом выделении памяти), используйте "умные" указатели (а в вашем случае можно вообще использовать статические данные), а если уж вы это делаете, то привыкайте освобождать выделенную память - вы этого не делаете 4. не очень важно, но все же: многоуровневые шаблоны - не читабельно и плохой стиль программирования Используйте классы или typedef Это сообщение отредактировал(а) ИванМ - 2.9.2010, 16:20 |
|||
|
||||
| tararataka |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 21.8.2010 Репутация: нет Всего: нет |
В find нельзя передать собственный предикат, а мне он нужен, так как у меня равные элементы не те, которые полностью равны, а у которых совпадает только часть first.
Забыл написать, мне нужно изменять значения некоторых элементов.
Типа если я свои вектора указателей снесу, то на что они ранее указывали останется?
Первый раз слышу, надо погуглить. Это сообщение отредактировал(а) tararataka - 2.9.2010, 16:23 |
||||||||
|
|||||||||
| ИванМ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
Вы быстро ответили.. Я изменил find на find_if
Это можно делать и со статическими элементами (статические - я имел ввиду, которые без new).
Да Правильно. И советую сразу которые в boost - shared_ptr и ему подобные. auto_ptr не рекомендую, т.к. его нельзя использовать в контейнерах. Это сообщение отредактировал(а) ИванМ - 2.9.2010, 16:31 |
||||
|
|||||
| tararataka |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 21.8.2010 Репутация: нет Всего: нет |
ИванМ
В find_if нельзя передавать шаблон поиска.
Так их же вроде нельзя создать неопределённое количество? |
||||||
|
|||||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
||||
|
||||
| tararataka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 21.8.2010 Репутация: нет Всего: нет |
mrbrooks
Потому что шаблоны поиска у меня разные, ну всмысле, я наперёд не знаю что буду искать. А передавать что-либо в функцию не через её аргументы - не кошерно. |
|||
|
||||
| tararataka |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 21.8.2010 Репутация: нет Всего: нет |
fix Ой, в предикат тоже можно передать значение.
|
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Т.е. хранить в других контейнерах итераторы того, где лежат инстансы? Для вектора это неудачная идея, он может переаллоцировать память и старые итераторы станут невалидными. Это сообщение отредактировал(а) Леопольд - 3.9.2010, 14:48 -------------------- вопросов больше чем ответов |
|||
|
||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 1 Всего: 23 |
Нельзя точно также как и динамические. Грубо говоря, элементы, переданные в контейнер, будут по-любому динамическими. Будут храниться в выделенной памяти. Я в основном на VS2008. Читал, что tr1 там есть, но я его не смог найти. Это сообщение отредактировал(а) ИванМ - 6.9.2010, 11:24 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |