ホームページ >バックエンド開発 >C++ >効率的な検索を維持しながら、マップ内の挿入順序を維持するにはどうすればよいですか?

効率的な検索を維持しながら、マップ内の挿入順序を維持するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 16:17:11431ブラウズ

How Can I Preserve Insertion Order in a Map While Maintaining Efficient Lookups?

std::map での挿入順序の保持

挿入順序が重要な状況では、std::map のみに依存するだけでは十分ではない場合があります。挿入順序を維持することが優先される場合は、別のアプローチを検討する必要があります。

1 つのオプションには、値を反復して出力する前に、マップのコンテンツを std::vector に変換することが含まれます。適切なファンクターを活用することで、std::sort を使用して、挿入順序に基づいて要素を配置できます。

ただし、高速な検索が不可欠な場合 (1,000 万回など)、ベクターを使用するとパフォーマンスが低下する可能性があります。懸念事項。このようなシナリオに対して、boost::multi_index ライブラリは、マップの効率性と複数のインデックスの柔軟性を組み合わせたソリューションを提供します。

boost::multi_index:

このライブラリを使用すると、コンテナごとに複数のインデックスを確立できます。この特定のケースでは、string メンバーと int メンバーを使用して value_t 構造体を定義し、2 つのインデックスを利用できます:

  1. ランダム アクセス: 挿入順序を表します
  2. Hashed Unique: 迅速に実行できるように文字列メンバーのインデックスを作成します。 lookups
次に、次のように multi_index_container をインスタンス化できます。

struct value_t {
    string s;
    int i;
};

struct string_tag {};

typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // insertion order
        hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>>
    >
> values_t;
このアプローチにより、コンテナを反復するときに挿入順序を維持しながら効率的なルックアップが可能になります。

以上が効率的な検索を維持しながら、マップ内の挿入順序を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。