| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Почему не срабатывает поиск по вектору. |
| Автор: tararataka 2.9.2010, 14:25 | ||
Мне нужно найти пару, первое поле которой совпадает с первым полем шаблона. Почему не срабатывает приведённый код? В найденном итераторе всегда оказывается первый элемент.
|
| Автор: azesmcar 2.9.2010, 14:28 |
| знакомься - http://www.cplusplus.com/reference/stl/map/ |
| Автор: tararataka 2.9.2010, 14:36 |
| Да знаю я про map, |
| Автор: azesmcar 2.9.2010, 14:36 |
и чем же? |
| Автор: ИванМ 2.9.2010, 14:42 | ||
tararataka, чтобы заработало достаточно изменить строку:
Другое дело, конечно, что код ужасен. |
| Автор: tararataka 2.9.2010, 15:18 | ||||||
azesmcar
Короче мне нужно иметь один контейнер отсортированным различным образом, плюс нужно постоянно добавлять элементы в него. Ну и что-бы не извращаться, я решил все операции выполнять на различных контейнерах, состоящих из ссылок на одни и те-же элементы. А map сортируется только по первому значению, если я хочу по второму, то мне нужно свопнуть пару. Но сделать это нужно так, что-бы она оставалась одной и той же парой. Я х.з. как это сделать. ИванМ
Ох блин, я совсем про это не подумал. Да, теперь всё корректно.
Эээ. |
| Автор: ИванМ 2.9.2010, 15:33 |
1. использование vector не по назначению В vector'е при таких манипуляциях будет происходить перезапись элементов. Лучше использовать list - как раз для таких целей. 2. использование алгоритмов не по назначению - для вашей цели подошел бы find_if. 3. лучше вообще отказаться от указателей (при динамическом выделении памяти), используйте "умные" указатели (а в вашем случае можно вообще использовать статические данные), а если уж вы это делаете, то привыкайте освобождать выделенную память - вы этого не делаете 4. не очень важно, но все же: многоуровневые шаблоны - не читабельно и плохой стиль программирования Используйте классы или typedef |
| Автор: tararataka 2.9.2010, 16:22 | ||||||||
В find нельзя передать собственный предикат, а мне он нужен, так как у меня равные элементы не те, которые полностью равны, а у которых совпадает только часть first.
Забыл написать, мне нужно изменять значения некоторых элементов.
Типа если я свои вектора указателей снесу, то на что они ранее указывали останется?
Первый раз слышу, надо погуглить. |
| Автор: tararataka 3.9.2010, 08:02 | ||||||
ИванМ
В find_if нельзя передавать шаблон поиска.
Так их же вроде нельзя создать неопределённое количество? |
| Автор: mrbrooks 3.9.2010, 08:13 | ||
не совсем понятно о чем это ты? почему не устраивает предикат?
если компилятор поддерживает tr1 - то в нем это уже есть. |
| Автор: tararataka 3.9.2010, 13:48 | ||
mrbrooks
Потому что шаблоны поиска у меня разные, ну всмысле, я наперёд не знаю что буду искать. А передавать что-либо в функцию не через её аргументы - не кошерно. |
| Автор: tararataka 3.9.2010, 14:05 |
| fix Ой, в предикат тоже можно передать значение. |
| Автор: Леопольд 3.9.2010, 14:44 | ||
|
| Автор: ИванМ 6.9.2010, 11:13 |
Нельзя точно также как и динамические. Грубо говоря, элементы, переданные в контейнер, будут по-любому динамическими. Будут храниться в выделенной памяти. Я в основном на VS2008. Читал, что tr1 там есть, но я его не смог найти. |
| Автор: tararataka 7.9.2010, 06:50 |
| А я могу с помощью дебаггера найти участки памяти, на которые ничто не указывает? |
| Автор: Леопольд 7.9.2010, 09:42 |
| tararataka, если речь про утечки памяти, то, вроде, valgrind может помочь. |