4

ブーストのドキュメント ( http://www.boost.org/doc/libs/1_55_0/doc/html/intrusive.html ) には、list(シングル/ダブル リンクの両方で)setおよびmultiset. マップの実装が見つかりませんでした。それにはもっと深い理由がありますか、それとも実装を待っているだけですか?

4

2 に答える 2

6

これは、map<Key, Value>実際にはa でset<std::pair<Key const, Value>>あり、Boost.Intrusive および Boost.MultiIndex セットにより、値メンバーの 1 つをキーとして使用できるためです。言い換えれば、検索する値全体ではなく、同等のキーを受け入れるmapif can の必要はありません。これは、 andで長年未解決の問題でした:findstd::mapstd::set

連想コンテナー検索関数 (find、lower_bound、upper_bound、equal_range) は key_type の引数のみを受け取り、ユーザーは検索を行うために key_type のオブジェクトを (暗黙的または明示的に) 構築する必要があります。これはコストがかかる場合があります。たとえば、コンパレータ関数がオブジェクトの 1 つのフィールドのみを参照する場合に、セット内を検索する大きなオブジェクトを構築する場合です。ユーザーの間では、key_type と同等の他のタイプを使用して検索できるようにしたいという強い要望があります。

于 2014-05-13T14:11:36.637 に答える