![]() |
|
Модераторы: 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-й. разве что буст...
а что это за конструкция
? это чем-то отличается от
? -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
с бусте есть же: http://www.boost.org/doc/libs/1_48_0/doc/html/unordered.html это новый синтаксис. тут объясняется основное преимущество: http://en.wikipedia.org/wiki/C%2B%2B11#Alt...function_syntax но он универсальный. можно использовать во всех случаях. Это сообщение отредактировал(а) boostcoder - 15.2.2012, 09:54 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
по сути нет, но есть случаи, когда первая запись невозможна, например при выведение типа из аргументов функции, потому как аргументы в этом случае еще на тот момент не известны.. Добавлено через 1 минуту и 50 секунд в некоторых случаях , когда возвращаемый тип имеет сложную записть, второй вариант нагляднее.. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
ясно. в вики хороший пример
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
||||
|
||||
| serghd |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
boostcoder, такой вариант, наверное, "чуть" попроще для понимания будет, как Вы считаете? Это сообщение отредактировал(а) serghd - 15.2.2012, 20:43 |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
лень было порядок наводить)
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |