비버놀로지

[Modern C++] Predefined Functor 본문

LANGUAGE STUDY/C C++

[Modern C++] Predefined Functor

KUNDUZ 2023. 1. 17. 09:28
728x90

Predefined Functor

comparision operator

  • set, map, priority_queue 에서 default로 less 사용
  • unorderd_set, unordered_map에서 default로 equal_to 사용
  • data type에 각각 operator==, operator<, operator>가 정의되어 있어야 한다.

1. equal_to

template<class T>
struct equal_to {
	bool operator() (const T& lhs, const T& rhs) const {
		return lhs == rhs;
	}
}

2. less

template <class T>
struct less {
	bool operator() (const T& lhs, const T& rhs) const {
		return lhs < rhs ;
    }
}

3. greater

template <class T>
struct greater {
	bool operator() (const T& lhs, const T& rhs) const {
		return lhs > rhs ;
	}
}

형태

 

1. less< T > : class

 

2. less< T>() : function less()(1,1) = false less()(1,2) = true

 

3. less< T>{} : function less{}(1,1) = false less{}(1,2) = true

 

hash

  • Requirement
    • key값에 대해 size_t type의 hash 값을 반환한다.
    • (size_t == unsigned long long)
    • k1, k2가 같다면 hash<key>(k1) == hash<key>(k2) 이어야 한다.
    • k1, k2가 다르다면 hash<key>(k1) == hash<key>(k2)인 확률이 매우 적어야 한다.
  • specialization 되어 있는 type
    • 기본 primitive type (int, long long, char, bool, double, float, ...)
    • string

 

※ specialization : 특정 data type에 대해 별도의 동작을 정의해준다. 즉, 각 type 특성에 맞게 hash function 이 적절히 구현되어 있다.

 

※key 값을 받아, hash value를 반환한다.

struct hash {
	size_t operator()(const Key &key) const{
		return (hash value);
	}
};

 

728x90

'LANGUAGE STUDY > C C++' 카테고리의 다른 글

[Modern C++] lambda  (0) 2023.01.17
[Modern C++] Operator Overloading(연산자 오버로딩)  (0) 2023.01.17
[Modern C++] Operator  (0) 2023.01.17
[Modern C++] mem function  (0) 2023.01.16
[Modern C++] Initializer list 초기화 리스트  (0) 2023.01.16
Comments