C++ 14は、連想コンテナの等価find操作のCompare::is_transparent
を導入します。順序付けられていないコンテナにstd :: is_transparentと同等の機能がないのはなぜですか?
template< class K > iterator find(const K& x);
template< class K > const_iterator find(const K& x) const;
値xと等価比較キーを持つ要素を検索します。 資格-IDの比較:: is_transparentが有効であるとタイプを表している場合 このオーバーロードは、唯一のオーバーロードの解決に参加しています。 、これらは、より効率的にすることができ構築
Key
の一時的なインスタンスはもはや存在しないので、それ は
キー
のインスタンスを作成せずに、この関数を呼び出すことができます。順序付けられていないコンテナに相当するが存在しないようです。
なぜ何Compare::key_equal
/Compare::hash_equal
ありませんか?
は、私は順序付けられていない容器の中に、例えば、文字列リテラルの見上げ効率的にできるように、比較的簡単だろうと想像しますか?あなたはCppConからGrill the committeeビデオを見た場合、このようなものがなぜ起こるか
template<>
struct hash<string>
{
std::size_t operator()(const string& s) const
{
return ...;
}
// hash_equal=true allows hashing string literals
std::size_t operator()(const char* s) const
{
return ...;
}
};
[N3573:無秩序な容器への異種の拡張](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3573.html) –
私は、順序付けられていない(ハッシュと等価性の比較のために)キーを2回使用しなければならないので、完璧なフォワーディング(透明なコンパレータは大きく寄与する)がここでは最良のデザイン選択ではないかもしれません。しかし[N3465](http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2012/n3465.pdf)私は 'is_transparent'を持った提案知りませんが、私は提案にそれを比較的小さな強化を考えているだろう –