我搜索了类似的内容,但我不明白答案,所以我再问你一次。
vector<int> v;
v.push_back(3);
v.push_back(11);
v.push_back(13);
v.push_back(-1);
v.push_back(-8);
v.push_back(324);
v.push_back(55);
sort(v.begin(),v.end(), greater<int>() );
for(auto i : v)
{
cout << i << " ";
}
// result按降序排列
priority_queue<int, vector<int>, greater<int>> pq;
pq.push(3);
pq.push(5);
pq.push(4);
pq.push(9);
pq.push(13);
pq.push(15);
while(!pq.empty())
{
cout << pq.top() << " ";
pq.pop();
}
// result是升序
greater的执行也在这里
struct greater : public binary_function<_Tp, _Tp, bool>
{
_GLIBCXX14_CONSTEXPR
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x > __y; }
}
x比;Y表示递减,为什么?为什么特别在优先队列中,更大意味着上升?请有人把这个说清楚…谢谢你!
# # #std::priority_queue
reference:
优先队列是一种容器适配器,它提供最大元素(默认情况下)的常量时间查找
(强调我的)
所以使用std::less的默认排序是降序的。通过使用std::greater,你可以逆转这一点。排序。
因为它是这样定义的。前面的答案很好,但我想再强调一下规范的另一部分
请注意,Compare参数的定义使其返回true
如果它的第一个参数在弱函数中的第二个参数之前
排序。但因为优先队列输出最大的元素
首先,“出现在前面”的元素实际上最后输出。那
队列的前面是否包含根据的“最后”元素
Compare强加的弱排序。
所以"greater"的意思是"small first"