170 похожих чатов

Привет. Есть вектор событий, событие - это структура, с некоторыми

полями: time, client_id, etc. Этот вектор отсортирован по времени события. Как принято в С++ искать lower/upper_bound события (по времени) за O(logn)? Нужно для этого заводить отдельный вектор по времени, который будет указывать индекс и там искать? Или можно более элегантно?

10 ответов

17 просмотров

(2) https://en.cppreference.com/w/cpp/algorithm/binary_search Сорян, не увидел баунд в вопросе

Так std::{lower,upper}_bound и так логарфмическую сложность имеют

Если ты структуру сравниваешь по времени всегда, то просто перепиши для неё знак <, если же тебе это требуется внутри одной лишь операции бин. поиска можешь передать функцию компаратор которая возвращает bool последним аргументом

Artöm Bakri Al-Sarmini
Так std::{lower,upper}_bound и так логарфмическую ...

главное помнить, что std::lower_bound логарифмический только для структур чьи данные сплошняком лежат, в list такое не прокатит, а в set эффективна только функция мембер

Никита
главное помнить, что std::lower_bound логарифмичес...

Там сложная формулировка. Логарифмическая сложность по сравнениям и лог или линия по access в зависимости от категории итератора

Станислав-Трухан Автор вопроса
Artöm Bakri Al-Sarmini
Так std::{lower,upper}_bound и так логарфмическую ...

А как это в коде? vector<unique_ptr<Event>> events; // добавить события в определенном порядке, где time не убывает events.push_back(make_unique<Event>(time1, client1)); events.push_back(make_unique<Event>(time2, client2)); // здесь нужно найти интервал старых событий, например где time < t auto lower_it = events.begin(); auto upper_it = ??? // events.upper_bound(t);

Станислав-Трухан Автор вопроса
Станислав Трухан
А как это в коде? vector<unique_ptr<Event>> events...

или как я говорил, нужно заводить отдельный индекс-массив для этого и в нем искать upper_bound?

Станислав Трухан
А как это в коде? vector<unique_ptr<Event>> events...

Что-то вроде auto up_it = std::upper_bound(events.begin(), events.end(), [](auto l, auto r) { return l.time < r.time; });

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта