0

私は STL の経験があまりないので、ここでの最善のアプローチがわかりません。

それぞれが一意の ID に関連付けられた一連のアクションがあります。アクションを重複させないようにするために、最初std::mapは ID をキーにして に保存することを考えていました。ただし、アクションを巻き戻すと追加されたときと逆の順序で表示されるように、内部的 厳密な順序を保持する必要があります。std::vector

アクションの任意のリストは、1 つまたは 2 つの項目から数千までの任意の項目である可能性があります。vector重複を手動でチェックする (つまり、ID を反復してチェックする)ように切り替えた場合、何かが失われますか? mapまたは、IDで検索できるが、要素を内部的に並べ替えたり並べ替えたりしない、使用できる何らかの形式または他のコンテナーがありますか?

4

2 に答える 2

2

マップの挿入順序をサポートできるboost:multi_indexマップを使用することをお勧めします。

struct Item 
{
      string name;
      int data;
};
struct ItemTag {};
typedef multi_index_container<
    Item,
    indexed_by<
        random_access<>, // this index represents insertion order
        hashed_unique< tag<ItemTag>, member<Item, string, &Item::name> >
    >
> ItemsMap;
于 2013-03-03T21:55:30.500 に答える
2

Boost.MultiIndexが必要なようですね

Boost Multi-index Containers Library は、multi_index_container という名前のクラス テンプレートを提供します。これにより、異なる並べ替えとアクセス セマンティクスを持つ 1 つ以上のインデックスを維持するコンテナーの構築が可能になります。インデックスは、STL コンテナーと同様のインターフェイスを提供するため、使い慣れたものになります。要素の同じコレクションに対するマルチインデックスの概念は、リレーショナル データベースの用語から借用されたものであり、単純なセットとマップでは不十分な複数インデックスのリレーショナル テーブルの精神で、複雑なデータ構造の指定を可能にします。std::set、std::list、ハッシュ セットなどの類似の STL コンテナをモデルにした、幅広いインデックスが提供されています。

于 2013-03-03T21:56:25.287 に答える