6

最初はstd::multimap、同じキーを持つ多くの値を格納するためにを使用し始めましたが、同じキーを持つ値間の挿入順序が保持されないことがわかりました。 この回答は、で実行できると主張していますがboost::multi_index::multi_index_container、例はありません。ドキュメントを見ると、その使用法の例はありません。私は、あなたがこのことをどのように使用することになっているのかについて頭や尾を引くことはできません。あまり使用されていないBoostライブラリからのドキュメントが貧弱であると予想するようになりましたが、これで問題は解決します。誰かが私が望む方法でそれが使用されたことを示すチュートリアルや例を教えてもらえますか、あるいはおそらく自分自身で例を提供することさえできますか?

4

2 に答える 2

7

これは、(同じキーを持つ値を許可する) と(挿入順序を維持する)のboost::multi_index2 つのインデックスを使用することで実現できます。ordered_non_uniquerandom_access

struct some {
  long key;
  int data;
  int more_data;
  // etc.  
};

typedef multi_index_container<
  some, 
  indexed_by<    
    random_access<>,  // keep insertion order
    ordered_non_unique< member<some, long, &some::key> >
  > 
> some_mic_t;
于 2010-07-13T20:03:37.930 に答える
-1

どうですか

map<int, vector<string> >

また

map<int, list<string> >

@キリル:良い答え。Boost の random_access は、すべてのキーのすべての文字列を単一の連続した構造に維持することを強制するため、非常に遅くなる可能性があると思います。一方、質問者は、各キーのマップされた値のセット内で順序を維持したいだけです。

于 2010-07-14T00:01:16.513 に答える