алгоритм — C ++ Set Comparator Data Structure данных

Я использую C ++ STL с пользовательским компаратором для хранения структуры данных Edge, как показано ниже. Я определил, что Edge по существу является парой ключ-значение. Индекс — это ключ, и я хочу перебрать коллекцию по значению (maxlength) от наибольшего к наименьшему. В любой момент времени я обычно забочусь только о ребрах с тремя самыми большими значениями. В коллекции будет только относительно небольшое количество ребер, от 7 до 64. Когда я вставлю ребро, значения двух смежных ребер нужно будет отрегулировать. Для этого я добавлю новое ребро в набор, затем уберу два смежных ребра и заново добавлю их с новыми значениями. Кто-нибудь может поделиться более эффективной структурой данных для этой цели?

#include <iostream>
#include <iomanip>
#include <sstream>
#include <set>

using namespace std;

struct Edge {
int maxlength;
int index;

Edge(int index, int maxlength) {
this->maxlength = maxlength;
this->index = index;
}

bool operator<(Edge other) const {
return maxlength < other.maxlength;
}
};

void run() {
set<Edge> edges;
edges.insert(Edge(25, 3));
edges.insert(Edge(21, 4));
edges.insert(Edge(28, 2));

cout << "First Edge: " << edges.begin()->maxlength << endl;
edges.erase(Edge(28, 2));
cout << "First Edge: " << edges.begin()->maxlength << endl;
edges.insert(Edge(39, 1));
cout << "First Edge: " << edges.begin()->maxlength << endl;
cout << "Last Edge: " << (--edges.end())->maxlength << endl;
}

int main() {
run();
return 1;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector