我对迭代器不满意。我正在尝试创建一个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 的副本,这可能不太有效,因为它可能会在构建堆时复制它们。而是存储(智能)指针。