c++ - 用一对对排序 STL 容器
问题描述
这是我第一次使用 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
s 是如何排序的,即a > b
两对的结果是什么(注意std::greater
只是调用operator>
)。
从cppreference开始std::pair::operator>
:
按字典顺序比较 lhs 和 rhs,即比较第一个元素,只有当它们相等时,才比较第二个元素。
这自然会扩展到嵌套对。因此...
假设我有 pq.push_back(make_pair(a,make_pair(b,c)))。如果a发生冲突,那么比较规则是否会延伸到第二对,并且会根据b然后c进行排序?
是的。如果两个元素相等,a
则将比较second
最外面的一对(即(b,c)
)。
推荐阅读
- android - RxAndroid 3 主线程
- unity3d - Camera not focused when using ARCore with Vuforia?
- java - 基于对象角色的算法消除
- mysql - XAMPP - 导入 .sql 文件后 MySQL 意外关闭
- javascript - Typescript 3.7@beta 可选链接运算符使用问题
- javascript - 无法为身份验证系统导入角度 8 中的 firestore 和 firebase
- javascript - 将列滑过,不移动整个元素 JQUERY
- kubernetes - 如何定位同步间隔并在 kubelet.go 中重写?
- javascript - 在 Angular 中引用 HTML 或 TS 文件中的 SCSS 变量值
- java - 为什么在使用 Socket java 类发送 http 请求时收到 400 Bad Request?