Проход по multimap |
Здравствуйте, гость ( Вход | Регистрация )
Проход по multimap |
rp80 |
7.11.2011, 18:15
Сообщение
#1
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вводим пары имя-значение. Нужно посчитать сумму и медиану значений по каждому ключу. Соответственно, нужно ходить по мультимапу.
Собственно, функцию я написал, но вопрос в том оптимальное ли это решение? Смущает эта возня с итераторами.. Буду рад выслушать ваши комментарии.
|
|
|
Iron Bug |
7.11.2011, 22:26
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
зачем так усложнять? у мультимапа есть equal_range и он отсортирован по ключам.
|
|
|
rp80 |
7.11.2011, 22:32
Сообщение
#3
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Iron Bug |
7.11.2011, 22:47
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
берём первый ключ. ищем по нему интервал, считаем сумму. если последний элемент интервала не end(), то берём следующий элемент (который после конца интервала) и всё то же самое.
Сообщение отредактировал Iron Bug - 7.11.2011, 22:48 |
|
|
rp80 |
7.11.2011, 22:56
Сообщение
#5
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
берём первый ключ. ищем по нему интервал, считаем сумму. если последний элемент интервала не end(), то берём следующий элемент (который после конца интервала) и всё то же самое. Ага, примерно так и набросал щас. Но в общем те же яйца по моему, только в профиль. Но, тем не менее, спасибо.
|
|
|
Iron Bug |
7.11.2011, 23:15
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
ну да. вроде верно.
только вместо неуклюжего (*it).first проще писать it->first. на самом деле, второй вариант быстрее, потому что мультимап быстрее интервалы выдаёт, чем попарное сравнение ключей. впрочем, можешь ради эксперимента забить туда пару миллионов тестовых значений и посчитать время, затраченное на первый алгоритм и на второй. только вывод из цикла предварительно убрать, чтобы время считалось правильно. Сообщение отредактировал Iron Bug - 7.11.2011, 23:22 |
|
|
Iron Bug |
8.11.2011, 17:21
Сообщение
#7
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
самой стало интересно, насколько эффективность повысилась. написала быстро замер времени.
под линём получены следующие результаты сравнения данных двух реализаций: На тесте 1000000 значений pair<string,int>("one",1): без оптимизации: через указатели - 134 мс через equal_range - 66 мс при оптимизации: через указатели - 64 мс через equal_range - 56 мс результаты линейно зависят от количества значений. плюс первый вариант начинает существенно больше тормозить при длинных значениях ключа(увеличивается время на сравнение). Сообщение отредактировал Iron Bug - 8.11.2011, 17:32 |
|
|
rp80 |
8.11.2011, 22:01
Сообщение
#8
|
Студент Группа: Участник Сообщений: 36 Регистрация: 10.9.2011 Пользователь №: 2860 Спасибо сказали: 0 раз(а) Репутация: 0 |
самой стало интересно, насколько эффективность повысилась. написала быстро замер времени. под линём получены следующие результаты сравнения данных двух реализаций: На тесте 1000000 значений pair<string,int>("one",1): без оптимизации: через указатели - 134 мс через equal_range - 66 мс при оптимизации: через указатели - 64 мс через equal_range - 56 мс результаты линейно зависят от количества значений. плюс первый вариант начинает существенно больше тормозить при длинных значениях ключа(увеличивается время на сравнение). Ну ещё одно доказательство преимущества STL над велосипедами своими. |
|
|
Iron Bug |
9.11.2011, 12:07
Сообщение
#9
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Ну ещё одно доказательство преимущества STL над велосипедами своими. ну, просто пример рационального использования STL. свои-то велосипеды пошустрее STL будут. смотря сколько времени можно затратить на проект и смотря как шустро он должен работать. в большинстве юзерских задач скорости STL вполне хватает. |
|
|
Текстовая версия | Сейчас: 30.11.2024, 6:14 |