对内部包含 2 对的向量进行排序
Sorting a vector with 2 pairs inside
嗯,我有一个向量,对>,我想知道他是如何排序的?用排序(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
defines a operator<
如果包含的类型支持通过 operator<
进行比较,而您使用的是 int
,则默认提供。
std::sort
使用此 operator<
对元素 lexicographically.
进行排序
如果您使用的是未定义 operator<
的任意类型,则必须提供您自己的比较器 std::sort
对于 class std::pair
有定义的运算符
template<class T1, class T2>
constexpr bool operator< (const pair<T1, T2>&, const pair<T1, T2>&);
按以下方式运作
Returns: x.first < y.first || (!(y.first < x.first) && x.second <
y.second).
例如,对于两对 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 <
进行比较。
嗯,我有一个向量,对>,我想知道他是如何排序的?用排序(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
defines a operator<
如果包含的类型支持通过 operator<
进行比较,而您使用的是 int
,则默认提供。
std::sort
使用此 operator<
对元素 lexicographically.
如果您使用的是未定义 operator<
的任意类型,则必须提供您自己的比较器 std::sort
对于 class std::pair
有定义的运算符
template<class T1, class T2>
constexpr bool operator< (const pair<T1, T2>&, const pair<T1, T2>&);
按以下方式运作
Returns: x.first < y.first || (!(y.first < x.first) && x.second < y.second).
例如,对于两对 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 <
进行比较。