2015-10-27 4 views
5

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 ...; 
    } 
}; 
+1

[N3573:無秩序な容器への異種の拡張](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3573.html) –

+1

私は、順序付けられていない(ハッシュと等価性の比較のために)キーを2回使用しなければならないので、完璧なフォワーディング(透明なコンパレータは大きく寄与する)がここでは最良のデザイン選択ではないかもしれません。しかし[N3465](http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2012/n3465.pdf)私は 'is_transparent'を持った提案知りませんが、私は提案にそれを比較的小さな強化を考えているだろう –

答えて

2

は、彼らが説明:誰もがそれのために戦っていません。

C++は、委員会によって標準化されたが、その委員会は、コミュニティからの入力を必要としています。誰かが論文を書いたり、批判に反応したり、会議に出かけるなどしなければなりません。そして、その機能に投票することができます。委員会は、言語と図書館の特徴を発明しているだけではありません。それはそれにもたらされるものについてのみ議論し、投票する。

+1

順不同コンテナを言及しません順序付けられていないコンテナを含める。私はこの質問が審査プロセスでなぜ上げられなかったのだろうか? –

+1

これは実現できないという技術的理由がないというのに、だれもそれに対抗することができなかったのですか? –

関連する問題