Я пытаюсь найти лучший метод для поиска вектора типа "Tracklet" (класс, который я сам создал), чтобы найти первое и последнее вхождение заданного значения для одной из его переменных. Например, у меня есть следующие классы (упрощенно для этого примера):
class Tracklet {
TimePoint *start;
TimePoint *end;
int angle;
public:
Tracklet(CvPoint*, CvPoint*, int, int);
}
class TimePoint {
int x, y, t;
public:
TimePoint(int, int, int);
TimePoint(CvPoint*, int);
// Relevant getters and setters exist here
};
У меня есть вектор "vector<Tracklet> tracklets
", и мне нужно искать любые треклеты с заданным значением "t" для конечного момента времени. Вектор упорядочен по времени окончания (т. Е. tracklet.end->t
).
Я рад написать алгоритм поиска, но не уверен, какой путь выбрать. Я не уверен, что бинарный поиск подойдет, так как я помню, что он не обязательно найдет первый. Я думал о методе, в котором я использую бинарный поиск, чтобы найти индекс элемента с правильным временем, затем итерирую назад, чтобы найти первое, и вперед, чтобы найти последнее. Я уверен, что есть лучший способ, так как он тратит двоичный поиск O (log n) путем итерации.
Надеюсь, это имеет смысл: я изо всех сил пытался объяснить это немного!
Ура!