对 STL 容器进行排序
sorting STL container with pair of pairs
这是我第一次使用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>。
- 使用2个键的cpp-stl::优先级队列排序不正确
- 在STL - C++中按成绩对学生列表进行排序?
- C++ STL 排序会检查 NaN 吗?
- 使用列表 STL 递归进行插入排序
- 如何使用 STL 排序对具有模板专用化的自定义类对象进行排序?
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- C++ wrt 字符串中的 STL 排序函数
- 如何检查队列是否使用 STL 排序
- STL按客户"<"运算符对向量进行排序。为什么要将"<"运算符定义为 const?
- C :STL STL阵列的STL排序
- STL 排序,保留原始顺序
- 列表STL的时间复杂性在一段时间内进行排序
- 为 STL 列表编写选择排序
- c ++ 是否有 STL 算法来检查范围是否严格排序
- 对 STL 容器进行排序
- 使用 stl::map 和 stl::unordered_map 对包含大量重复元素的数组数据进行排序
- 使用另一个stl向量重新排序stl向量
- 在两个值上排序STL向量
- 排序STL列表的子类