|
Языки программирования Изучаем С++, Sql, php, Lua, Python |
|
Опции темы | Поиск в этой теме | Опции просмотра |
14.04.2012, 19:37 | #1 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
[Язык С] списки(мапы) с быстрым поиском и удалением
С си особо незнаком...нужна реализация очень быстрого контейнера для рандомного поиска и удаления элемента. Вставка не особо важна.
Размеры до ~5 млн записей ( запись 5 интов + хеш, если нужен). Важен именно поиск и удаление. |
14.04.2012, 21:09 | #2 | |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
В C нет контейнеров. Они есть в C++ как STL.
Вектор это массив - можно обратиться по номеру элемента Лист это лист - тупо список Мап это мап - ключ и значение Что тебе надо объясни. Это я не понял что ты имел ввиду. Цитата:
__________________
SpellWork Qt4 |
|
14.04.2012, 22:43 | #3 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
массив - тоже контейнер.
Лист - это лист....только с учетом того - упорядоченный, отсортированый, динамичческий...не тупо список. мап - хешмап, сетмап ...с сохранением упорядоченности и без. Нужен контейнер для быстрого рандомного поиска и удаления элемента по индексу, хешу; суть не важна - важна скорость рандомного поиска и удаления. 5 интов + хеш = 6*32 = 24 байта - размер объекта для хранения, поиска.
|
14.04.2012, 23:18 | #4 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
тогда std::unordered_map. правда его пока формально еще нет, но пользоваться уже можно.
|
Пользователь сказал cпасибо: | Evgeniy (16.04.2012) |
16.04.2012, 18:10 | #5 | |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
Цитата:
нашел бенч - с сравнением stl_unordered_map, glib_hash_table, google_dense_hash_map, boost_unordered_map и тп. google_dense_hash_map таки выигрывает в скорости, хотя проигрывает в потреблении памяти (мне как раз и не критично). Буду пробовать, спасибо. |
|
19.04.2012, 11:37 | #6 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
я бы не стал полагаться на такие результаты тестов совсем. потому что результат _очень_ сильно зависит от компилятора, его билда/релиза, мемманагера, ключей компиляции, а в случае продукции M$ - еще и от погоды на Марсе и обострения геморроя у дядюшки Ляо. надо пробовать все варианты на своей конкретной задаче и своими конкретными руками.
|
19.04.2012, 20:14 | #7 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
|
20.04.2012, 20:07 | #8 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
собиралось gcc version 4.6.2, OpenSuse 32 bit с ключем -o2 и -o3
результаты: charts-o3.html.zip charts-o2.html.zip до "своей задаче попробовать" еще не дошло, с++ планирую использовать лишь в качестве подключаемой библиотеки...по тестам выгоднее минимум в 2 раза получается. Не все так просто как хотелось бы...так как с языком не владею |
19.06.2012, 08:24 | #9 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
расстроился....
выкинул все мапы и т.п. использовал массив.
зы вывод один - там где можно использовать массивы - нужно использовать. |
Пользователь сказал cпасибо: | KiriX (19.06.2012) |
19.06.2012, 08:52 | #10 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
2) Ну так кто бы сомневался про итерацию в массиве 3) Тоже, в общем-то, не проблема... Возможно, я сейчас сморожу чушь, т.к. от программирования довольно далёк НО! разве это не априори, что если есть возможность использовать более простой элемент, который вполне справляется с поставленной задачей, то нужно именно его и использовать, а не более сложные структуры? P.S: Как раз именно эта тема и затрагивалась когда я последний раз читал самоучитель для чайников (правда по С++). Резюме всей главы таким и было, как я описал. Ибо дело именно в скорости работы... В вашем конкретном случае, как мне сразу и показалось, именно массива как раз и достаточно. |
|
19.06.2012, 09:20 | #11 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
по "правильному" его не достаточно...искривляется рандомный поиск...
нормальные - зеленые удаленные - серые красный - нормальный, но с увеличенной вероятностью выбора Как оказалось - вполне допустимая погрешность, хотя логически неправильно( что и помешало изначально использовать ) нет рандомного поиска по значению...так что приходится сохранять и пересохранять необходимые индексы для некоторых объектов...код получается запутанным. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
русский язык в Mangos One | Mediv | MaNGOS 0.12 (2.4.3) | 32 | 27.02.2011 20:39 |
Некорректо отоброжает русский язык | Bupyc | Корзина | 10 | 02.12.2010 07:42 |