Название: Стандартные алгоритмы Отправлено: AzazelloAV от Апрель 12, 2015, 01:46 И так и сяк кручу.
Как же объеденить свойства List со свойствами Hash - т.е. и быстрый доступ по индексу и быстрый поиск по ключу, вот такие взаимоисключения. То лирика. Задача - число, определить какому диапазону оно принадлежит. Понятно, диапазон есть. P.S. Ну про брутфорс не будем. P.P.S. И конечно же! Христос воскрес! Название: Re: Стандартные алгоритмы Отправлено: System от Апрель 12, 2015, 08:32 быстрый доступ по индексу и быстрый поиск по ключу std::list<ValType> для быстрого доступа по индексу, std::hash<KeyType, size_t> для быстрого поиска по ключу, значения в хэше - индексы списка. Далее просто объединяем эти два объекта в одном классе. Пойдёт?Название: Re: Стандартные алгоритмы Отправлено: Igors от Апрель 12, 2015, 09:31 И так и сяк кручу. Наверное имелся ввиду QList, но причем тут Hash (QHash ?) - для поиска по диапазону он непригоден. Нужен std::lower_bound выбирайте любой контейнер который это имеет, а можно и просто сортированный массив/вектор. Если данные нужно удалять/добавлять(и это критично по скорости) - тогда хужее. В бусте есть такой "multi" (не помню точно) и, пожертвовав еще кусочком коры мозга, постичь можно. Но я бы все-таки сделал свой Как же объеденить свойства List со свойствами Hash - т.е. и быстрый доступ по индексу и быстрый поиск по ключу, вот такие взаимоисключения. То лирика. Задача - число, определить какому диапазону оно принадлежит. Понятно, диапазон есть. P.S. Ну про брутфорс не будем. Название: Re: Стандартные алгоритмы Отправлено: AzazelloAV от Апрель 12, 2015, 09:53 std::list<ValType> для быстрого доступа по индексу, std::hash<KeyType, size_t> для быстрого поиска по ключу, значения в хэше - индексы списка. Далее просто объединяем эти два объекта в одном классе. Пойдёт? В принципе подойдёт, пока нет вставки удаления - т.е. перерасчет всего листа при произвольном удалении (вставке). Цитировать Нужен std::lower_bound выбирайте любой контейнер который это имеет, а можно и просто сортированный массив/вектор. Если данные нужно удалять/добавлять(и это критично по скорости) - тогда хужее. В бусте есть такой "multi" (не помню точно) и, пожертвовав еще кусочком коры мозга, постичь можно. Но я бы все-таки сделал свой Про мульти знаю, но не хочу влазить ни в буст, ни в стд. Вообщем пока решил так - массив (вектор) сортированый, поиск элемента - методом деления пополам. Хотя действительно, вместо сортированного массива можно использовать и метод, приведенный выше (если добавление элементов всегда в конец) |