C++/STL

[STL] functional

화요밍 2021. 2. 3. 21:45
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