Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Stl: нужен контейнер для быстрого поиска по имени 
V
    Опции темы
Alca
Дата 7.5.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Stl: нужен контейнер для быстрого поиска по имени? map?


--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 7.5.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Alca @  7.5.2009,  10:21 Найти цитируемый пост)
Stl: нужен контейнер для быстрого поиска по имени? map? 

map обеспечивает поиск логаритмической сложности. В принципе да - ассоциативный контейнер (либо отсортированный обычный контейнер - даст возможность применить бинарный поиск).

Добавлено через 2 минуты и 52 секунды
В принципе можно немного ускорить саму операцию сравнения - хранить вместо имени - числовой хеш. Сравнение чисел быстрее чем сравнение строк. Все зависит от задачи.
PM   Вверх
Lazin
Дата 7.5.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



если не нужно получать элементы в определенном порядке, а нужно только быстро искать их по имени, то лучше использовать hash_map smile 
PM MAIL Skype GTalk   Вверх
Alca
Дата 7.5.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

Все зависит от задачи.

У меня в файле храняться данные о пользователях:
Код

user_1|pass|server|port|email
user_2|pass|server|port|email
user_3|pass|server|port|email
user_4|pass|server|port|email
user_5|pass|server|port|email
user_6|pass|server|port|email

надо организовать быстрый поиск по имени пользователя.




--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 7.5.2009, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Alca

Думаю тут можно применить хеш smile имя пользователя не такое длинное чтобы беспокоится о коллизиях.

если нестандартные решения подходят
Цитата(Lazin @  7.5.2009,  10:35 Найти цитируемый пост)
то лучше использовать hash_map smile  

если нет - хешируйте имя пользователя сами.

http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%...%BD%D0%B8%D0%B5


Это сообщение отредактировал(а) azesmcar - 7.5.2009, 10:41
PM   Вверх
jonie
Дата 7.5.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



если известны данные, что имя может начинаться с буквы из определенного множества, то можно сделать массив map-ов, нечто вроде vector<map<string>> , где индексом в vector будет первая буква имени. Т.о. мы существенно уменьшим количество данных в отдельной карте и увеличим скорость, в ущерб, конечно, памяти.
Аналогично можно делать vector<vector<.....<map>>...> .... - главное фантазия.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Static
Дата 7.5.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 6.11.2008

Репутация: 1
Всего: 2



Мне кажется, что при большом количестве имен при таком подходе получится кака, т.к. не получится равномерно распределить все имена. Они имеют подлую особенность начинаться с одинаковых букв. Может и не получиться "существенно уменьшить количество данных в одной карте". Или я неправ?
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
Alca
Дата 7.5.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Кол-во строк в файле порядка 1000 -1500.


--------------------
PM WWW ICQ Skype Jabber   Вверх
baldina
Дата 7.5.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата

Кол-во строк в файле порядка 1000 -1500. 


двоичный поиск даст максимум 10-11 сравнений. это довольно быстро. думаю отсортированный массив вполне подойдет
PM MAIL   Вверх
Lazin
Дата 7.5.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(baldina @  7.5.2009,  12:24 Найти цитируемый пост)
двоичный поиск даст максимум 10-11 сравнений. это довольно быстро. думаю отсортированный массив вполне подойдет

поиск в map - столько-же, в hash_map - в зависимости от количества коллизий
PM MAIL Skype GTalk   Вверх
Void
Дата 7.5.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(jonie @  7.5.2009,  13:10 Найти цитируемый пост)
Аналогично можно делать vector<vector<.....<map>>...> .... - главное фантазия. 

Получилось префиксное дерево (trie). Дальше фантазия может работать в сторону Patricia и ternary search tree.
Впрочем, не думаю, что топикстартеру при такой постановке задачи нужно что-то кроме хэш-таблицы.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
mrbrooks
Дата 7.5.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(Alca @  7.5.2009,  12:11 Найти цитируемый пост)
Кол-во строк в файле порядка 1000 -1500. 

хм. может заюзать простенькую БД. Что - то пихать такое количество инфы в контейнер, имхо, не айс.
PM MAIL   Вверх
Alca
Дата 7.5.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Цитата

хм. может заюзать простенькую БД.

Типа эксесса? 


--------------------
PM WWW ICQ Skype Jabber   Вверх
azesmcar
Дата 7.5.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Void @  7.5.2009,  12:49 Найти цитируемый пост)
Впрочем, не думаю, что топикстартеру при такой постановке задачи нужно что-то кроме хэш-таблицы. 

для 1000-1500 записей? там мап и хэш таблица особой разницы не дадут. Там порядке 10 сравнений, для подсчета хэша потеряем больше чем получим прироста при поиске на мой взгляд..хотя надо проверить, но по любому отходить от стандарта ради пары десятка милисекунд думаю  не стоит.

Добавлено @ 13:04
Цитата(mrbrooks @  7.5.2009,  12:54 Найти цитируемый пост)
хм. может заюзать простенькую БД. Что - то пихать такое количество инфы в контейнер, имхо, не айс. 

почему? ну пусть каждая структура в среднем ..ну пусть будет 100 байт. Пусть будет 2000 записей, 2000*100=20000, делим на 1024 получаем где-то 20 килобайт..учитывая некоторые затраты памяти требуемые ассоциативными контейнерами, пусть будет 25 килобайт, не больше..это что, так страшно? на мой взгляд не очень smile

Это сообщение отредактировал(а) azesmcar - 7.5.2009, 13:06
PM   Вверх
baldina
Дата 7.5.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



задача мелкая, изобретений не стоит.
Alca, тестирование уже показало, что требуется оптимизация?
если нет - возьми простейшую реализацию.

Lazin
Цитата

поиск в map - столько-же

не совсем.
во-первых это не идеально сбаласированные деревья, во вторых там больше накладные расходы на одну проверку. да и памяти больше требует.

Это сообщение отредактировал(а) baldina - 7.5.2009, 13:23
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0933 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.