![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Paspartu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 3.5.2007 Репутация: нет Всего: нет |
Доброго времени суток.
Помогите сделать оптимизацию. Есть следующие классы:
Вопрос такой надо в векторе находить элементы по заданному критерию, в данном случае те у которых this->pA_Vec[n]-> ptPos.y == nLevel (т.к. эти элементы обязательно стоят по порядку, то находить индекс первого и последнего элемента удовлетворяющих критерию) затем с этими элементами производится ряд других действий. Кроме как сделать структуру Properties и в дальнейшем работать с ней я больше ничего не придумал... Так как эта функция вызывается очень много раз то возник вопрос ее оптимизации. Возможно ли использовать итераторы? На много ли это повысит производительность? P.S. Пишу по памяти, возможны синтактические ошибки. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Paspartu, может, лучше использовать set или multiset?
|
|||
|
||||
| georain |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 28.11.2006 Где: Санкт-Петербург Репутация: нет Всего: нет |
Paspartu, если элементы в векторе изменяются очень редко, то при каждом добавлении вместо push_back() можно делать insert() в нужную позицию, чтобы вектор всегда был отсортированным. Тогда можно будет сказать что все элементы после заданного больше (меньше или какой критерий сортировки) этого и твой алгоритм будет работать. Ну и соответственно у элементов вектора изменять нельзя данные-критерий сортировки (у тебя это ptPos.y), для этого придётся этот элемент выдернуть и вставить на новое место. По быстродействию все будет идеально пока элементы вектора будут изменяться очень редко.
Если они изменяются достаточно часто используй set, multiset, map или multimap. Там используются автоматическая сортировка при вставке, но для их использования нужно будет использовать итераторы. При частом изменении элементов эти контейнеры в твоей задаче будут работать более эффективно. Это сообщение отредактировал(а) georain - 26.9.2008, 15:10 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Это означает, что элементы отсортированы по y? Если да, то используй equal_range и соответствующий предикат. -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |