我正在使用带有自定义比较器的C ++ STL集来存储Edge数据结构,如下所示。我将Edge定义为一个键值对。索引是关键,我想通过值(maxlength)从最大到最小迭代集合。在任何给定的时间,我通常只关心具有3个最大值的边缘。集合中只有相对较少的边缘,范围从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;
}