我对迭代器不满意。我正在尝试创建一个priority_queue,按 vector 长度排序。 (即,我想按顺序弹出最长的 vector 。)

这是我一直在使用的资源:

http://www.cplusplus.com/reference/stl/priority_queue/priority_queue/

我尝试了这段代码,它似乎可以满足我的要求:

// testing to make sure that a priority queue will always give me the longest vector
priority_queue< vector<int> > q;

vector<int> f;
f.push_back(1);

vector<int> g;
g.push_back(19);
g.push_back(80);

vector<int> y;
y.push_back(62);
y.push_back(10);
y.push_back(11);

q.push(f);
q.push(g);
q.push(y);

vector<int> out = q.top();

for (unsigned int i = 0; i < out.size(); i++) {
    cout << out[i] << endl;
}

我的问题:
1.这会一直给我最长的时间吗?似乎是这样。
2.如果没有,我该怎么办?引用页上的迭代器语法类似于... o_O

谢谢!!

最佳答案

不,代码不能满足您的期望。它按字典顺序而不是按长度比较 vector 。要按长度比较,请使用自定义比较器:

struct LengthCompare {
    bool operator() (const vector<int>& a, const vector<int>& b) {
        return a.size() < b.size();
    }
};

priority_queue<vector<int>, vector<vector<int> >, LengthCompare> q;

还要注意,您的队列存储 vector 的副本,这可能不太有效,因为它可能会在构建堆时复制它们。而是存储(智能)指针。

10-05 22:43
查看更多