C ++ 14에서 연관 컨테이너는 C ++ 11에서 변경된 것 같습니다 – [associative.reqmts] / 13은 다음과 같이 말합니다.
멤버 함수 템플릿은
find
,count
,lower_bound
,upper_bound
,와equal_range
유형이하지 않는 오버로드 확인에 참여하지 않는다Compare::is_transparent
존재한다.
비교기를 "투명하게"만드는 목적은 무엇입니까?
C ++ 14는 다음과 같은 라이브러리 템플릿도 제공합니다.
template <class T = void> struct less {
constexpr bool operator()(const T& x, const T& y) const;
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
template <> struct less<void> {
template <class T, class U> auto operator()(T&& t, U&& u) const
-> decltype(std::forward<T>(t) < std::forward<U>(u));
typedef *unspecified* is_transparent;
};
그래서 예를 들어, std::set<T, std::less<T>>
것 없는 투명한 비교기를 가지고 있지만,std::set<T, std::less<>>
것 하나가있다.
이로 인해 어떤 문제가 해결되고 표준 컨테이너의 작동 방식이 바뀌나요? 예를 들어,의 템플릿 매개 변수는 std::set
여전히 Key, Compare = std::less<Key>, ...
너무 기본 설정은 잃지 않는, find
, count
, 등 회원?