Codeforces Round 980 (Div. 2) C题

kaltists / 2024-11-11 / 原文

sort用法
Sort(start,end,cmp)

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

参数 [5]
(1)start表示要排序数组的起始地址;迭代器的起始位置,对于数组来说就是数组的首地址,一般写上数组名就可以,因为数组名是一个指针常量。
(2)end表示数组结束地址的下一位;迭代器的结束位置,即首地址加上数组的长度n(代表尾地址的下一地址)。
(3)cmp用于规定排序的方法,可不填,默认升序。迭代器的结束位置,即首地址加上数组的长度n(代表尾地址的下一地址)。

以下为使用的模板题

#include<bits/stdc++.h>
using namespace std;
int T,n;
struct node{
	int x,y;
}a[100005];
bool cmp(node x,node y){
	return x.x+x.y<y.x+y.y;
}
signed main(){
	cin>>T;
	while(T--){
		cin>>n;
		for(int i=1;i<=n;i++)
			cin>>a[i].x>>a[i].y;
		sort(a+1,a+1+n,cmp);
		for(int i=1;i<=n;i++)
			cout<<a[i].x<<" "<<a[i].y<<" ";
		cout<<endl;
	}
	return 0;
}

此外sort还有排列动态数组的用法

bool cmp(int a[],int b[])
{
	if(a[0] != b[0]) return a[0] > b[0];
	if(a[1] != b[1]) return a[1] > b[1];
	if(a[2] != b[2]) return a[2] > b[2];
}
 
int main()
{
	int a[6] = {1, 1, 1, 2, 2, 3};		//储存re[i][0] 
	int b[6] = {4, 4, 3, 9, 5, 9};		//储存re[i][1] 
	int c[6] = {3, 7, 5, 4, 8, 6};		//储存re[i][2] 
	int i;
	
	int **re = new int*[6];		//动态创建二维数组 
	for (i = 0; i < 6; ++i)
	{
		re[i] = new int[3];
		re[i][0] = a[i];
		re[i][1] = b[i];
		re[i][2] = c[i];
	}
	sort(re, re + 6, cmp);		//排序后输出 
	for(i = 0; i < 6; ++i)
		cout << re[i][0] << ' ' << re[i][1] << ' ' << re[i][2] << endl;
 
	return 0;
}``````