这是打印优先级队列中第二对元素的功能:
void show(priority_queue <pair<int,string>> pq)
{
priority_queue <pair<int,string>> tmp=pq;
while (!tmp.empty())
{
cout<<tmp.top().second<<endl;
tmp.pop();
}
}
输入值为:
1 www.youtube.com
2 www.google.com
3 www.google.com.hk
10 www.alibaba.com
5 www.taobao.com
10 www.bad.com
7 www.good.com
8 www.fudan.edu.cn
9 www.university.edu.cn
10 acm.university.edu.cn
我知道它应该按照第一个元素的降序排序,当两个元素相同时,它将保持我输入的第一个元素。
它应该先打印“ www.alibaba.com”,然后再打印“ www.bad.com”,然后再打印“ acm.university.edu.cn”,因为所有的第一个值为10。
但是它先打印“ www.bad.com”,然后打印“ www.alibaba.com”,然后打印“ acm.university.edu.cn”,依此类推。这是怎么了
该std::pair
比较运算符使用lexiographical水平的研究。
对于两对p1
,p2
这意味着如果p1.first == p2.first
比较p1.second < p2.second
。因此,顺序将是“最大”second
到“最小”(因为优先级队列的顺序相反)。
如果要进行自定义比较,则可以为队列提供一个自定义的“小于”功能。例如,一个没有比较这对second
成员的人(但是后来我认为顺序是不确定的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句