|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Здравствуйте уважаемые Гуру! Я не студент и не профи. Будьте пожалуйста великодушны. Visual Studio 2013 Раньше для поиска использовал функцию std::find_if(); С++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Но теперь нужен более быстрый поиск. В большом цикле на каждой итерации ищется нужная структура, участвующая в вычислениях по алгоритмам Вектор отсортирован по полю Acnt Попробовал сделать так, по аналогии с первым кодом С++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Компилятор пишет ошибку и указывает на строку в библиотеке algorithm "Ошибка 84 error C2064: результатом вычисления фрагмента не является функция, принимающая 2 аргументов c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm 2514 1 " Понимаю что накосячил , наверное с лямбда выражением, а может и не только с ним. Укажите пожалуйста в чем косяк. Только пожалуйста растолкуйте простым языком Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 16:25 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
ArbitТолько пожалуйста растолкуйте простым языком У твоей лямбды один параметр. Для Compare требуется два. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 16:40 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо. В общем получилось так (все скомпилировалось и работает) С++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
НО! На тестовом цикле (Вектор предварительно отсортирован по полю Acnt ) std::find_if() - 11.085 сек std::lower_bound() - 12,200 сек линейный поиск структуры в векторе быстрее бинарного?! Разве такое может быть? Или я опять накосячил? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 00:07 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
ArbitНО! На тестовом цикле (Вектор предварительно отсортирован по полю Acnt ) std::find_if() - 11.085 сек std::lower_bound() - 12,200 сек линейный поиск структуры в векторе быстрее бинарного?! Разве такое может быть? Или я опять накосячил? Бинарный поиск в разы быстрее. Замеры времени корректно сделаны? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 07:22 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Возможно где-то происходит неявное создание копий объектов. Проверьте нет ли в Account конструкторов из строки которые объявлены без explicit или операторов преобразования типа в строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 12:21 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, Спасибо, Вы правы! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 13:19 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Dima T, Спасибо Чем лучше делать замер, clock()? или использовать функцию из библиотеки chrono - chrono::high_resolution_clock::now(); ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 13:24 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
ArbitDima T, Спасибо Чем лучше делать замер, clock()? или использовать функцию из библиотеки chrono - chrono::high_resolution_clock::now(); Неважно чем. В виндовсе можно clock(). Я на другое намекал, можно случайно измерить так: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 15:34 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Dima T, Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 18:04 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Здравствуйте уважаемые Гуру! Помогите пожалуйста найти мой косяк Только пожалуйста не пинайте сильно. - Есть отсортированный вектор структур. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
- Вектор заполняется в цикле структурами на основе SQL запроса из базы данных с сортировкой по текстовому полю Acnt . Код: plsql 1.
- В этом поле находятся данные в следующем формате (для примера):: "010" "20" "202" "402-53" "722-02-78" Значения могут содержать только цифры и знак "-" Фрагмент вектора 201 202 203 204 205 ... Ищу, например, структуру с полем поиска равным - "2025", или "202-53" которых нет в векторе Получаю в результате индекс структуры со значением "203" в обоих случаях хотя должен получить -1 Если ищу структуру со значением имеющимся в векторе , то все нормально Вот функция которой проверяю наличие или отсутствие структуры в векторе Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Заранее благодарен всем откликнувшимся ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2018, 20:31 |
|
Бинарный поиск в отсортированном векторе структур
|
|||
---|---|---|---|
#18+
Так и должно работать https://en.cppreference.com/w/cpp/algorithm/lower_bound Return value Iterator pointing to the first element that is not less than value, or last if no such element is found. Добавь проверку найденного Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 07:43 |
|
|
start [/forum/topic.php?fid=57&fpage=15&tid=2017709]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 253ms |
total: | 390ms |
0 / 0 |