对内部有 2 对的向量进行排序
Sorting a vector with 2 pairs inside
好吧,我有一个向量,成对>,我想知道他是如何进行排序的? with sort(v.begin((,v.end(((;
using namespace std;
int main(){
int n; cin >> n;
vector<pair<pair<int,int>, pair<int,int>>> v;
for(int i=0;i<n;i++){
long long x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
v.push_back(make_pair(make_pair(x1,y1),make_pair(x2,y2)));
}
sort(v.begin(),v.end());
for(auto& p : v){
cout<<p.first.first<<" "<<p.first.second<<" "<<p.second.first<<" "<<p.second.second<<"n";
}
return 0;
}
输入:
4
5 19 8 17
5 15 15 5
0 20 20 0
8 10 10 8
输出:
0 20 20 0
5 15 15 5
5 19 8 17
8 10 10 8
对于类std::pair
,有定义的运算符
template<class T1, class T2>
constexpr bool operator< (const pair<T1, T2>&, const pair<T1, T2>&);
按以下方式行事
返回: x.第一个
<x.first(>< y.秒(。
例如,对于两对类型std::pair<std::pair<int, int>, std::pair<int, int>>
{ { 5, 19 }, { 8, 17 } }
^^^^^^^^^
和
{ { 5, 15 }, { 15, 5 } }
^^^^^^^^^
首先,使用相同的operator <
比较{ 5, 19 }
和{ 5, 15 }
对。
小于第一对,则第二对将在结果向量中的第一对之前。
例如,如果它们(第一对(彼此相等
{ { 5, 15 }, { 8, 17 } }
^^^^^^^^^
和
{ { 5, 15 }, { 15, 5 } }
^^^^^^^^^
然后比较第二对。因为{ 8, 17 }
对小于{ 15, 5 }
所以第一对小于第二对。
{ 8, 17 }
和{ 15, 5 }
对使用相同的模板operator <
进行比较。
如果包含的类型支持通过operator<
进行比较,std::pair
定义一个operator<
,并且您使用的是int
,因此默认情况下提供它。
std::sort
使用此operator<
按字典顺序对元素进行排序。
如果使用未定义operator<
的任意类型,则必须提供自己的比较器以std::sort
相关文章:
- 计算排序向量的向量中唯一值的计数
- 查找两个排序向量中共有的元素
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 如何从C++的对的排序向量中获取有关给定值的相应对
- 对象接收堆栈溢出异常 c++ 的排序向量
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 指向指针排序向量的指针向量的 C++ 向量
- 未排序向量上的lower_bound/upper_bound
- 智能指针的排序向量:神秘崩溃
- 按类型排序向量并按类型或派生类型搜索
- 如何在不使用标准算法的情况下在排序向量中添加 c 元素?
- C++排序向量<double>与在<Object>双成员变量上键控的向量
- 字符串指针的排序向量
- 具有前导数字的字符串的排序向量
- 保证重新排序向量
- 结构解释的C 排序向量
- 更新排序向量的一个条目
- 通过在排序向量上使用二叉搜索来定位未排序向量中的元素
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 使用QuickSort算法以降序排序向量