私はそれをC++に変換したいJavaプログラムを持っています。したがって、Javaコードで使用されるLinkedhashmap
データ構造がありますそれをC++に変換したいのですが、C++のLinkedHashmap
に相当するデータ型はありますか?
std::unordered_map
を使用しようとしましたが、挿入の順序が維持されません。
C++は、Javaの_LinkedHashMap<K,V>
_を模倣する動作を備えたコレクションテンプレートを提供しないため、マッピングとは別に順序を維持する必要があります。
これは、データを_std::list<std::pair<K,V>>
_に保持し、キーでアイテムをすばやく検索できるように別の_std::unordered_map<k,std::list::iterator<std::pair<K,V>>>
_マップを保持することで実現できます。
std::prev(list.end())
にマップします。std::list<std::pair<K,V>>
_を繰り返します。キー反復の挿入順序コントラクトは、log(n)パフォーマンスのバランスの取れたツリーで実現できます。アイテムの削除にはn回のルックアップ時間が必要なため、これはリスト内のキーを維持するよりも優れています。私のマントラは、あなたが調べたものをリストに載せることは決してありません。並べ替える必要がない場合は、ハッシュを使用してください。ソートする必要がある場合は、バランスの取れたツリーを使用してください。繰り返すだけの場合は、リストで問題ありません。 C++では、これはstd::map
ここで、キーはアイテム参照であり、値は挿入順序です。キーは赤黒木を使用してソートされます。参照: STLにソートされたコンテナはありますか