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
などのメンバーを?