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
반응형