[C++] STL 알고리즘 ⑨ (미리 정의된 함수 개체 예 - 컨테이너 요소를 큰 것에서 작은 것으로 정렬 | 정렬 정렬 알고리즘 | 더 큰<T> 미리 정의된 함수 개체)





1. 미리 정의된 함수 객체의 예 - 컨테이너 요소를 큰 것부터 작은 것 순으로 정렬합니다.



1. 정렬 정렬 알고리즘


C++ 표준 템플릿 라이브러리(STL, Standard Template Library)는 <algorithm> 헤더 파일 에 정의된 일반 알고리즘인 정렬 알고리즘 기능을 제공합니다.

정렬 알고리즘은 컨테이너의 요소를 정렬하는 데 사용됩니다 . 이 알고리즘은 매우 효율적이며 지정된 반복자 범위 내에서 요소를 정렬 할 수 있으며 정렬 순서는 사용자가 지정한 비교 함수를 기반으로 정의할 수 있습니다.

사용자 지정 비교 함수는 이진 조건자입니다.


std::sort 알고리즘의 기본 정렬 규칙의 함수 프로토타입은 다음과 같습니다.

template< class RandomIt >  
void sort( RandomIt first, RandomIt last );  
  • RandomIt first, RandomIt last 매개변수: 이 함수는 정렬해야 하는 시퀀스 범위를 정의하는 두 개의 무작위 액세스 반복자 first 및 last를 허용합니다 . 참고: 이 범위는 앞쪽으로 닫혔다가 열리는 간격입니다.
  • 기본 비교 규칙: 이 범위의 요소는 기본적으로 < 연산자를 사용하여 비교 및 ​​정렬됩니다 . 사용자 정의 클래스가 < 연산자 오버로드 기능을 구현하지 않으면 오류가 보고될 수 있습니다.

std::sort 알고리즘 사용자 정의 정렬 규칙의 함수 프로토타입은 다음과 같습니다.

template< class RandomIt, class Compare >  
void sort( RandomIt first, RandomIt last, Compare comp );
  • RandomIt first, RandomIt last 매개변수: 이 함수는 정렬해야 하는 시퀀스 범위를 정의하는 두 개의 무작위 액세스 반복기 first 및 last 를 허용합니다 . 참고: 이 범위는 앞쪽으로 닫혔다가 열리는 간격입니다.
  • 사용자 정의 비교 규칙 비교 comp 매개변수: 이 매개변수는 이진 조건자, 즉 2개의 매개변수를 받고 부울 값을 반환하는 함수 객체입니다. 이 범위의 요소는 이 이진 조건자 규칙을 사용하여 정렬됩니다.

2. 더 큰 미리 정의된 함수 객체


C++ 표준 템플릿 라이브러리(STL, 표준 템플릿 라이브러리)는 이진 술어인 더 큰<T> 사전 정의 함수 객체를 제공합니다 . 이 함수 객체의 도움으로 두 값을 편리한 방식으로 비교하여 결과를 결정할 수 있습니다. 첫 번째 값이 두 번째 값보다 큰가요?

이 함수 개체는 주로 STL 알고리즘에서 정렬 순서, 검색 조건 및 기타 시나리오를 제어하는 ​​데 사용됩니다.


더 큰<T> 함수 객체는 <function> 헤더 파일에 정의되어 있으며, 비교할 요소 유형을 지정하는 일반 유형 매개변수 T를 허용합니다 .

더 큰<T> 함수 객체는 내부적으로 함수 호출 연산자인 Operator()를 오버로드하므로 이 클래스의 인스턴스 객체를 일반 함수처럼 호출할 수 있습니다.





2. 코드 예제 - 사전 정의된 함수 객체



1. 코드 예시


코드 예:

#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"

int main() {
    
    

	// 创建一个 set 集合容器
	vector<int> myVector;

	// 向容器中插入元素
	myVector.push_back(9);
	myVector.push_back(5);
	myVector.push_back(2);
	myVector.push_back(7);

	// 向 foreach 循环中传入 Lambda 表达式
	for_each(myVector.begin(), myVector.end(), [](int a) {
    
    
		std::cout << a << " ";
		});
	cout << endl;


	// 将 myVector 容器中的元素按照从大到小的顺序排列
	sort(myVector.begin(), myVector.end(), greater<int>());

	// 向 foreach 循环中传入 Lambda 表达式
	for_each(myVector.begin(), myVector.end(), [](int a) {
    
    
		std::cout << a << " ";
		});
	cout << endl;

	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
	return 0;
};

2. 실행결과


결과 :

9 5 2 7
9 7 5 2
계속하려면 아무 키나 누르십시오. . .

여기에 이미지 설명을 삽입하세요.

추천

출처blog.csdn.net/han1202012/article/details/135493770