C++ 벡터 2차원 배열은 두 번째 차원으로 정렬됩니다.

문제 소개

Leetcode452에서 각 풍선의 간격 범위가 벡터<int>로 저장되고 마지막으로 모든 풍선의 수평 간격을 저장하는 데 벡터<벡터<int>>가 사용되는 2차원 배열 정렬 문제가 발생했습니다.
여기에 이미지 설명을 삽입하세요
여기서는 모든 풍선 수평 간격을 끝 위치별로 정렬하려고 합니다.

기본 지식

1. 정렬 기능의 활용

	sort(start, end, cmp);  
  • start는 정렬할 배열의 시작 위치이고, end는 정렬할 배열의 끝 위치에서 다음 비트입니다.
  • cmp는 정렬 기준을 나타냅니다. cmp가 기본값인 경우 기본값은 오름차순입니다.
    정렬 기능의 장점은 cmp와 결합하여 특정 차원 또는 여러 차원으로 다차원 벡터 배열을 정렬할 수 있다는 것입니다. 예는 다음과 같습니다:
bool cmp(int a, int b){
	return a > b;
	//意味着a大于b时,把a排到b的前面,即降序排序
}
int  a[];
sort(a,a+10,cmp);
//实现了将数组a的前十位降序排序
bool cmp(vector<int> &a,vector<int> &b){
//传入两个vector数组
return a.back() < b.back();
//根据数组元素的最后一位进行降序排序
}

vector<vector<int>> points;
sort(points.begin(),points.end(),cmp);
//对二维数组points,按照第二维进行排序

주의할 점은 다음과 같습니다.

  • cmp 함수에서 비교되는 요소는 정렬할 배열의 가장 바깥쪽 내용이어야 합니다.
  • sort에 전달되는 것은 정렬할 전체 배열의 시작 위치와 끝 위치, 정렬 기준 cmp이다.

2. 람다식

  • 람다 식은 한 줄로 구현할 수 있는 익명 함수를 정의하며
    함수 형식은 다음과 같습니다.
[capture](params) opt -> ret {body;};
  • 캡처는 특정 범위의 변수 캡처를 구현하며, 변수가 캡처되지 않을 때 기본값으로 설정될 수 있습니다.
  • params는 매개변수 목록으로, 매개변수 목록이 없는 경우 기본값으로 설정될 수 있습니다.
  • opt는 함수 옵션입니다.
  • ret은 반환 값 유형입니다. 추측할 수 있으면 기본값으로 설정할 수 있습니다.
  • body;는 함수 본문의 내용이며 기본값으로 설정하면 안 됩니다.
    일반적으로 람다 표현식은 사용자 정의 함수 메서드보다 느립니다! !

원래 문제에 대한 해결책

위에서는 두 가지 형태의 정렬 배열이 소개되었지만 그 의미는 정렬 기준을 규정하기 위해 cmp 함수를 사용한다는 것입니다. 단지 람다 표현식이 암시적 함수 정의를 사용한다는 것뿐입니다.
1. cmp의 정렬 기능을 정의합니다.

bool cmp(vector<int> &a, vector<int> &b){
	return a.back() < b.back();
	//意味着当a的最后一位比b的最后一位小时,将a排序到b前,即实现了升序排序
}
vector<vector<int>>points;
sort(points.begin(),points.end(),cmp);

2. 람다 표현식을 사용한 정렬 함수(실제로 cmp 함수는 암묵적으로 정렬에 통합되어 있음)

sort(points.begin(),points.end(),[](vector<int>a,vector<int>b){return a.back() < b.back();};

Supongo que te gusta

Origin blog.csdn.net/ZHorcrux/article/details/129326728
Recomendado
Clasificación