C ++ Set Comparator数据结构

时间:2014-01-14 17:45:20

标签: c++ algorithm set comparator

我正在使用带有自定义比较器的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;
}

0 个答案:

没有答案