Russian Qt Forum
Ноябрь 23, 2024, 03:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Стандартные алгоритмы  (Прочитано 2586 раз)
AzazelloAV
Гость
« : Апрель 12, 2015, 01:46 »

И так и сяк кручу.
Как же объеденить свойства List со свойствами Hash - т.е. и быстрый доступ по индексу и быстрый поиск по ключу, вот такие взаимоисключения.

То лирика. Задача  - число, определить какому диапазону оно принадлежит. Понятно, диапазон есть.

P.S. Ну про брутфорс не будем.

P.P.S. И конечно же! Христос воскрес!
Записан
System
Гость
« Ответ #1 : Апрель 12, 2015, 08:32 »

быстрый доступ по индексу и быстрый поиск по ключу
std::list<ValType> для быстрого доступа по индексу, std::hash<KeyType, size_t> для быстрого поиска по ключу, значения в хэше - индексы списка. Далее просто объединяем эти два объекта в одном классе. Пойдёт?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 12, 2015, 09:31 »

И так и сяк кручу.
Как же объеденить свойства List со свойствами Hash - т.е. и быстрый доступ по индексу и быстрый поиск по ключу, вот такие взаимоисключения.

То лирика. Задача  - число, определить какому диапазону оно принадлежит. Понятно, диапазон есть.

P.S. Ну про брутфорс не будем.
Наверное имелся ввиду QList, но причем тут Hash (QHash ?) - для поиска по диапазону он непригоден. Нужен std::lower_bound выбирайте любой контейнер который это имеет, а можно и просто сортированный массив/вектор. Если данные нужно удалять/добавлять(и это критично по скорости)  - тогда хужее. В бусте есть такой "multi" (не помню точно) и, пожертвовав еще кусочком коры мозга, постичь можно. Но я бы все-таки сделал свой
Записан
AzazelloAV
Гость
« Ответ #3 : Апрель 12, 2015, 09:53 »

std::list<ValType> для быстрого доступа по индексу, std::hash<KeyType, size_t> для быстрого поиска по ключу, значения в хэше - индексы списка. Далее просто объединяем эти два объекта в одном классе. Пойдёт?

В принципе подойдёт, пока нет вставки удаления - т.е. перерасчет всего листа при произвольном удалении (вставке).

Цитировать
Нужен std::lower_bound выбирайте любой контейнер который это имеет, а можно и просто сортированный массив/вектор. Если данные нужно удалять/добавлять(и это критично по скорости)  - тогда хужее. В бусте есть такой "multi" (не помню точно) и, пожертвовав еще кусочком коры мозга, постичь можно. Но я бы все-таки сделал свой

Про мульти знаю, но не хочу влазить ни в буст, ни в стд.
Вообщем пока решил так - массив (вектор) сортированый, поиск элемента - методом деления пополам. Хотя действительно, вместо сортированного массива можно использовать и метод, приведенный выше (если добавление элементов всегда в конец)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.