C+sort 정렬 의 내림차 순,오름차 순 사용 총화

오름차
C+sort 함 수 는 매우 편리 합 니 다.내 장 된 유형 에 대해 서도 사용자 정의 유형 을 빠르게 정렬 할 수 있 습 니 다.내 장 된 유형 에 대한 사용 이 비교적 간단 합 니 다.다음은 사용자 정의 유형의 정렬 을 토론 합 니 다.보통 다음 과 같은 몇 가지 사용 방법 이 있 습 니 다.
1.1 과부하 비교 연산 자
예 를 들 어 우 리 는 현재 한 무리의 학생 들 이 그들의 성적 에 따라 오름차 순 서 를 매 겨 야 한다.성적 이 같 으 면 이름 의 오름차 순 에 따라 순 서 를 매 길 수 있다.그러면 우 리 는 다음 과 같이 조작 할 수 있다.

struct Student{
 string name;
 int grade;
 
 Student(string name, int grade) : name(name), grade(grade){}
 
 bool operator < (const Student& rhs) const{
  return grade < rhs.grade
  || (grade == rhs.grade && name < rhs.name);
 }
 
 friend void operator << (ostream& output, const Student& s){
  output << s.name << " " << s.grade << endl;
 }
};

int main()
{
 vector<Student> vec;
 
 vec.emplace_back("Jack", 20);
 vec.emplace_back("John", 30);
 vec.emplace_back("Amy", 20);
 vec.emplace_back("Bill", 90);
 
 cout << "Before:" << endl;
 for(auto& s : vec){
  cout << s;
 }
 
 sort(begin(vec),end(vec));
 
 cout << endl << "After:" << endl;
 for(auto& s : vec){
  cout << s;
 }
 
 return 0;
}
다음 그림 과 같이 실행 결과:

1.2 비교 함수
물론 우 리 는 스스로 비교 함 수 를 써 서 다음 과 같이 실현 할 수 있다.

bool cmp(const Student& lhs, const Student& rhs){
 return lhs.grade < rhs.grade
 || (lhs.grade == rhs.grade && lhs.name < rhs.name);
}
다음 방법 으로 호출:
sort(begin(vec),end(vec), cmp);
1.3 함수 개체
또 다른 방식 은 함수 대상 을 구성 하거나 functor 라 고 부 르 는 것 입 니 다.사실은 다시 불 러 오 는 operator()의 종 류 를 실현 하 는 것 입 니 다.코드 는 다음 과 같 습 니 다.

struct Compare{
 bool operator()(const Student& lhs, const Student& rhs){
  return lhs.grade < rhs.grade
  || (lhs.grade == rhs.grade && lhs.name < rhs.name);
 }
};
다음 방법 으로 호출:
sort(begin(vec),end(vec), Compare());
1.4 Lambda
C++11 Lambda 가 있 으 면 더 이상 작은 함수 에 서명 함 수 를 쓸 필요 가 없습니다.다음 과 같이 사용 하면 됩 니 다.

sort(begin(vec), end(vec), [](const Student& lhs, const Student& rhs) {
				return lhs.grade < rhs.grade 
				 || (lhs.grade == rhs.grade && lhs.name < rhs.name); });
내림차 순
내림차 순 정렬 방법 은 오름차 순 과 유사 합 니 다.비교 함수,Lambda 또는 비교 함수 방식 을 사용 하면 비교 조건 만 바 꾸 면 됩 니 다.그러나 Student 류 에 대해 서 는 operator<이후 내림차 순 정렬 을 위해 operator>를 정의 하지 않 으 면 어떻게 합 니까?두 가지 방법!
2.1 reverse
오름차 순 서 를 정렬 한 후 reverse 로 반전 하면 됩 니 다.
2.2 역방향 교체
다음 과 같은 방식 으로 호출 하면 됩 니 다.operator 를 다시 불 러 올 필요 가 없습니다>
sort(vec.rbegin(), vec.rend());
3.실례 보충
다섯 자리 수의 임 의 정수 에 대하 여 그 하강 순 서 를 구하 다.예 를 들 어 정수 가 82319 이면 그 하강 순 서 는 98321 이다.알고리즘 알림:정수 의 여러분 수 를 1 차원 정형 배열 a 로 분해 한 다음 에 a 배열 의 요 소 를 내림차 순 으로 정렬 하고 마지막 으로 a 배열 요소 값 을 출력 합 니 다.
이 기능 을 완성 하 는 데 사용 할 클래스 Descendnum 을 만 듭 니 다.구체 적 인 요 구 는 다음 과 같다.
(1)개인 데이터 멤버
int n:다섯 자리 수의 정 수 를 저장 합 니 다.
int a[5]:원 소 를 저장 하 는 내림차 순 배열 값 입 니 다.
(2)공유 멤버 함수
Descendnum(int x=0):구조 함수,인자 x 로 n 을 초기 화 합 니 다.
void decompse():n 의 각 수 를 a 배열 로 분해 합 니 다.
void dsort():a 배열 을 내림차 순 으로 정렬 합 니 다.
void show():요소 와 내 림 순 서 를 표시 합 니 다.
(3)주 함수 에 5 자리 수의 임 의 정 수 를 입력 한 다음 에 Descendnum 류 대상 num 을 정의 하고 위 에서 입력 한 수 로 num 을 초기 화한 다음 에 이러한 종류의 테스트 를 완성 합 니 다.

#include "stdafx.h"
#include<iostream>
using namespace std;
class DescendNUM
{
public:
	DescendNUM(int x){ n = x;}//:    ,   x   n。
void decompose ();//: n       a  。
void dsort();//: a      。
void show();//:         。
private:
	int n;//:  5     。
 int a[5];//:           。
};
 
void DescendNUM::decompose ()
{
	int i=0;
	while(n!=0)
	{
		a[i++] = n%10;
		n = n/10;
	}
}
void DescendNUM::dsort()
{
	int j,i,t;
	int num=a[0];
	for(i=0;i<4;i++)
	for(j=0;j<5;j++)
	{
		if(a[j+1]>a[j])
		{
   t=a[j+1];
		 a[j+1]=a[j];
		 a[j] = t;
		}
	}
}
void DescendNUM::show()
{
	int i;
	for(i=0;i<5;i++)
	{
		cout<<a[i];
	}
	cout<<endl;
}
int main()
{
	DescendNUM num(82319);
	num.decompose ();
	num.dsort();
	num.show();
	return 0;
}
 여기 서 C+sort 정렬(내림차 순,승차 순)에 관 한 정 리 된 글 을 소개 합 니 다.더 많은 관련 C++내림차 순,승차 순 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기