イテレータを指定すると、このイテレータが参照するコレクションの正しい比較関数を取得/使用できますか?
たとえば、一般的なアルゴリズムを書いているとしましょう:
template <class InIt, class T>
void do_something(InIt b, InIt e, T v) {
// ...
}
vここで、 find inのような簡単なことをしたいとしましょう[b..e)。bとeが a のイテレータである場合、std::vector単純に を使用できますif (*b == v) ...。bただし、とeが a のイテレータであると仮定しましょうstd::map。この場合、マップに含まれている値の型全体ではなく、キーのみを比較する必要があります。
問題は、これらのイテレータをマップに指定した場合、キーのみを比較するマップの比較関数を取得するにはどうすればよいかということです。同時に、mapどちらか一方を扱っているとやみくもに想定したくありません。たとえば、反復子が を指している場合、その に対してset定義された比較関数を使用したいと思いますset。vectorそれらがまたはを指している場合、これらのコンテナーには比較関数が定義されていないため、dequeおそらく を使用する必要があります。==
ああ、ほとんど忘れていました。多くの場合、コンテナーには、含まれる要素ではoperator<なく、同等のものしかないことがわかりました。それを使用できてもまったく問題ありません。operator==