함수 객체 - 비교 연산 조건자

seio·2022년 10월 9일
0

C++ STL

목록 보기
14/17

STL은 다음 여섯 가지 비교 연산 함수 객체 조건자를 제공한다.

- equal_to<T>: 이항 조건자로 ==연산
- not_equal_to<T>: 이항 조건자로 !=연산
- less<T>: 이항 조건자로 <연산
- less_equal<T>: 이항 조건자로 <=연산
- greater<T>: 이항 조건자로 >연산
- greater_equal<T>: 이항 조건자로 >=연산

조건자(predicate)는 조건을 판단해야 하는 대부분의 알고리즘에 사용된다. 특정 정렬 기준으로 정렬되어야하는 컨테이너인 연관 컨테이너 set, map ~에 도 사용된다. 이렇게 비교(조건자)가 사용되어야하는 STL 구성 요소의 기본조건자는 less 이다.

//less 사용 방법

int main(){
	less<int> oLess;
    cout<<oLess(10,20)<<endl;
    cout<<oLess.operator()(10,20)<<endl;
    
    cout<<less<int>()(10,20)<<endl;
    cout<<less<int>().operator()(10,20)<<endl;
    
    return 0;
}

//사용자 Less

template <typename T>
struct Less: public binary_function<T,T,bool>
{
	bool operator()(const T& left, const T& right)const{
     		return left<right;
    }
}
int main(){
	Less<int> oLess;
    cout<<oLess(10,20)<<endl;
    cout<<oLess.operator()(10,20)<<endl;
    
    cout<<less<int>()(10,20)<<endl;
    cout<<less<int>().operator()(10,20)<<endl;
    
    return 0;
}

조건자는 상태가 변결될 수 없으므로 bool 형식을 반환하는 operator() 연산자 함수를 꼭 const 함수로 구현해야 한다.

//비교 연산 조건자


	int main(){
    	vector<int> v;
        // 20보다 작은 원소의 개수
    	count_if(v.begin(),v.end(),bind2nd<less<int>>(less<int>(),20))<<endl;
        
        // 20보다 작거나 같은 원소의 개수
    	count_if(v.begin(),v.end(),bind2nd<less_equal<int>>(less_equal<int>(),20))<<endl;
        
    	// 20보다 큰 원소의 개수
    	count_if(v.begin(),v.end(),bind2nd<greater<int>>(greater<int>(),20))<<endl;
        
        // 20보다 크거나 같은 원소의 개수
    	count_if(v.begin(),v.end(),bind2nd<greater_equal<int>>(greater_equal<int>(),20))<<endl;
    }
    
    // 20과 같은 원소의 개수
    	count_if(v.begin(),v.end(),bind2nd<equal_to<int>>(equal_to<int>(),20))<<endl;
        
            // 20과 다른 원소의 개수
    	count_if(v.begin(),v.end(),bind2nd<not_equal_to<int>>(not_equal_to<int>(),20))<<endl;
        
profile
personal study area

0개의 댓글