对 STL 容器进行排序

sorting STL container with pair of pairs

本文关键字:排序 STL      更新时间:2023-10-16

这是我第一次使用C++ STL priority_queue(),我对我遇到的这段特定代码有点困惑(但我相信这与 pq 无关,它应该适用于所有容器(向量、集合等((:

priority_queue<pair<int, pair<int, int> >,
            vector<pair<int, pair<int, int> > >,
            greater<pair<int, pair<int, int> > > > pq;

假设我有pq.push_back(make_pair(a,make_pair(b,c))).如果a发生冲突,那么比较规则是否会扩展到第二对,排序将在b的基础上进行,然后c

问题基本上可以归结为:std::pair如何排序,即两对a > b的结果是什么(请注意,std::greater只是调用operator>(。

从 cpp 首选项 上 std::pair::operator>

字典顺序比较 lhs 和 rhs,即比较第一个 元素,并且仅当它们是等效的时,才比较第二个 元素。

这自然会延伸到嵌套对。因此。。。

假设我有pq.push_back(make_pair(a,make_pair(b,c(((。倘 存在 A 的冲突,那么比较规则是否会扩展到 第二对和排序将在 B 的基础上完成,然后是 C?

是的。如果两个元素具有相等的a则将比较最外层对(即(b,c)(的second

如果a发生冲突,那么比较规则是否会扩展到第二对,并且排序将在b的基础上进行,然后是c?

完全。 std::greater默认为 operator > ,在std::pair的情况下,它实现了字典顺序比较 - 也就是说,比较第一个,如果第一个重合,则比较第二个。

priority_queue需要一个比较方法。默认情况下,将使用std::less,但您可以覆盖它。

使用std::pair将意味着使用std::p air:http://www.cplusplus.com/reference/utility/pair/operators/使用的默认比较

我认为这应该回答你的问题。

你是对的:对的对按(a,b,c(的词典顺序排序。看看std::great,它实际上调用std::p air::operator>。