7

c ++の「標準ライブラリ」には、挿入順で順序を保持する機能を持つ「連想」(つまり「キー値」)コンテナ/データ構造がありますか?

これについていくつかのトピックを見てきましたが、ほとんどが C++11 より前のようです。

「boost::multi_index」の使用を提案する人もいますが、可能であれば、標準のコンテナー/構造を「むしろ」使用したいと思います。

C++11には、明らかに「順序付けられていない」連想コンテナがいくつかあることがわかります: link

これらのいずれかは、何らかの方法で「構成可能」で、挿入順序でのみソートされるようになっていますか?

ありがとう!

4

3 に答える 3

2

いいえ。

リニア アクセスとランダム アクセスを混在させています。あまり良いベッド仲間ではありません。

前者へのインデックスを使用するマップとともに、ベクトル/リスト(つまり、挿入順序) の両方を使用するだけです。

于 2013-09-21T05:30:26.670 に答える
0

いいえ; そのような能力は明らかにパフォーマンスの名の下に犠牲にされました。

同等のアイテムの順序は、再ハッシュを含む操作全体で保持する必要がありますが、元の順序を指定する方法はありません。理論的には、std::rotateなどを使用して、各挿入後にオブジェクトを目的の順序に並べ替えることができます。明らかに実用的ではありませんが、能力の欠如が少し恣意的であることを証明しています。

あなたの最善の策は、サブシーケンスを内部コンテナーに保持することです。反復子アダプターを使用して、そのような「深い」コンテナーを単一のシーケンスであるかのように反復処理できます。このようなユーティリティは、おそらく Boost で見つけることができます。

于 2013-09-21T06:45:11.313 に答える