![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Здравствуйте.
Требуется контейнер для частой вставки элементов, причём вставляться они будут так, чтобы контейнер всегда оставался отсортированным. Я тут поэкспериментировал, и понял, что из тех, которые пришли на ум, быстрее всего вектор.
http://liveworkspace.org/code/8ed11be0bbbe...47c76ba9dca3821 рез-т у меня на компе (MSVC 2008 Release)
рез-т на LWS
Но, может есть что-то специализированное как раз для моего случая ? Что-нибудь бустовское ? Спасибо. P.S. Может подскажете ещё: почему студийный deque под release так медленнее minGW-шного, да ещё и под debug ??? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
RB-дерево попробуй. Результаты списка и очереди очень предсказуемы.
-------------------- You're face to face With man who sold the world |
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
попробовал. добавил
http://liveworkspace.org/code/a69d6828ebcc...518bd39bdc11b9f рез-ты на моём компе
на LWS
В общем большого преимущества не видно... Видать, работа с вектором в (specially for newbee) библиотеке, функции которой начинаются с std::, вылизана дальше некуда. Кто-нибудь что-нибудь подскажет ещё ? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
std::set - это RB? Оно должно работать шустрее вектора... Теоретически. Для чистоты эксперемента попробуй вместо жалких 10к элементов использовать миллион.
Мммм))) К чему бы это? -------------------- You're face to face With man who sold the world |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
странно... ожидал что множество будет быстрее..
|
|||
|
||||
| borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ну... по-моему да.
попробовал. у вектора 320 секунд, у сета - 321 секунда. Думаю, здесь уже играет роль выделение памяти, а не сам алгоритм... не хочу напороться на
it was a joke http://imagehost.spark-media.ru/i4/510C281...jpg/Sarcasm.jpg Я, просто, всю жизнь считал, что раз вектор или какой нибудь алгоритм входит в стандартную (Standard) библиотеку (Library), и он - шаблонный (Template), то он входит в библиботеку STL... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
borisbn, максимальный размер вектора известен?
|
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Вообще-то известно, что это - единицы тасяч. Поэтому я и остановился на векторе. Мне уже стало интересно дальше поисследовать. Просто на будущее.
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
чичас. допилю.
|
|||
|
||||
| rumit7 |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
А так?
http://liveworkspace.org/code/0cbb7270ae53...c9b917c20971e02 Добавлено через 8 минут и 38 секунд Если N увеличить в 10 раз, то на моей тачке преимущество heap-версии достигает 70 раз, а в LWS порядка 10:
http://liveworkspace.org/code/0b533d7ae5fd...396d48d17334786 |
||||||||||||
|
|||||||||||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
а так нечестно... ты сортируешь после N вставок, а мне нужно иметь отсортированный вектор после каждой вставки. да и потом, этот вариант ничем не отличается от
который, кстати, быстрее -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| rumit7 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
Вы уверены что в примере где Вы добавили std::set, это было сделано правильно? Там у Вас в LWS тип переменной set - std::vector< int >. И потом на мой взгляд правильнее использовать multiset. http://liveworkspace.org/code/836e3c80b699...5c7bda67fabca7b
|
||||||
|
|||||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
господа, где здесь иконка "посыпаю себе голову пеплом и обещаю больше не пользоваться "прогрессивной" технологией копи/паст" ? rumit7, спасибо большое, а то я уже перестал понимать, что происходит. И, таки, да, конечно, правильно будет multiset. Я, правда, проверил скорость обхода вектора и мультисета (тупо пройтись по всем и посчитать сумму) у вектора, ессно, быстрее, даже в 10 раз, но это ни в какое сравнение не идёт с разницей во вставке.
ну, всё. rumit7, спасибо ещё раз. Закрываю Добавлено через 9 минут и 48 секунд Уууупсс... Забыл newbee поблагодарить. Она ж сразу сказала про Стендаля. newbee, спасибо. Добавлено через 11 минут и 22 секунды boostcoder, и тебе, ессно, спасибо за то, что не верил, что я всё правильно делал -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
не. не получилось вектор ускорить...
зато unordered_multiset работает в двое быстрее multiset`а
http://liveworkspace.org/code/a2a90a2c7c1b...f62eb92bde8a4bd заодно и посмотреть как использовать chrono |
|||
|
||||
| borisbn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
boostcoder, спасибо. Помнится я как-то сравнивал unordered-версии со стандартной и получил тот же рез-т. Есть одно но...У меня нет возможности использовать 0x11-й. разве что буст...
а что это за конструкция
? это чем-то отличается от
? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |