728x90
반응형
Function objects는 함수와 유사한 구문처럼 사용하도록 특별하게 설계된 객체다. C++에서는 일반적으로 함수 객체는 operator () 멤버 함수가 정의 된 클래스의 인스턴스이다. 이 멤버 함수를 사용하면 함수 호출과 동일한 구문으로 개체를 사용할 수 있다.
#include<functional>
예를 들어, fucntional 라이브러리에 내장 되어 있는 함수 less의 원형은 다음과 같다.
template <class T> struct less {
bool operator() (const T& x, const T& y) const {return x<y;}
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
주로 Functional 라이브러리의 내장 함수와 Algorithm 라이브러리의 sort() 함수를 함께 사용해 정렬을 구현하는데 활용한다.
이때, Fuctional 라이브러리의 내장 함수는 sort의 매개변수인 Compare 객체로 들어간다.
내장 함수
less<T>() less<T>()(a, b) |
첫 번째 인수가 두 번째 인수보다 작은 지의 여부 boolean를 반환 a가 b보다 작은 지 비교하여 그 여부를 boolean으로 반환 |
greater<T>() greater<T>()(a, b) |
첫 번째 인수가 두 번째 인수보다 큰 지의 여부 boolean를 반환 a가 b보다 큰 지 비교하여 그 여부를 boolean으로 반환 |
less_equal<T>() less_equal<T>()(a, b) |
첫 번째 인수가 두 번째 인수보다 작거나 같은 지의 여부 boolean를 반환 a가 b보다 작거나 같은 지 비교하여 그 여부를 boolean으로 반환 |
greater_equal<T>() greater_equal<T>()(a, b) |
첫 번째 인수가 두 번째 인수보다 크거나 같은 지의 여부 boolean를 반환 a가 b보다 크거나 같은 지 비교하여 그 여부를 boolean으로 반환 |
사용 예제
1. 내림차순 정렬
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void){
vector<int> v;
v.push_back(3);
v.push_back(1);
v.push_back(9);
v.push_back(4);
v.push_back(8);
sort(v.begin(), v.end(), greater<int>());
for(int i=0; i<v.size(); i++){
cout << v[i] << " ";
}
return 0;
}
2. 오름차순 정렬
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void){
vector<int> v;
v.push_back(3);
v.push_back(1);
v.push_back(9);
v.push_back(4);
v.push_back(8);
sort(v.begin(), v.end(), less<int>());
for(int i=0; i<v.size(); i++){
cout << v[i] << " ";
}
return 0;
}
728x90
반응형
'C++ > STL' 카테고리의 다른 글
[STL] algorithm (0) | 2021.02.03 |
---|---|
[STL] Priority Queue (0) | 2021.02.02 |
[STL] cmath(math.h) (0) | 2021.01.22 |
[STL] Queue (0) | 2021.01.11 |
[STL] Stack (0) | 2021.01.11 |