ホームページ > バックエンド開発 > C++ > 特に要素数が限られている場合、std::map での挿入順序を維持するにはどうすればよいですか?

特に要素数が限られている場合、std::map での挿入順序を維持するにはどうすればよいですか?

DDD
リリース: 2024-12-07 13:29:14
オリジナル
274 人が閲覧しました

How Can I Maintain Insertion Order in a std::map, Especially with a Limited Number of Elements?

挿入順序を含む std::Map

要素の順序が重要な場合、std::map 内の挿入順序を追跡することが重要です。 std::map は主にキー値に基づいて要素を並べ替えますが、要件に対処するには 2 つの解決策が考えられます。

解決策 1: std::Vector を使用する

std::vector を使用する場合、頻繁なルックアップとインクリメントによるパフォーマンスに関する懸念があると述べましたが、std::vector とカスタム コンパレーターを組み合わせることで、広告掲載順序を維持します。ただし、要素の数が大幅に増加した場合、このアプローチでは実際にパフォーマンス上の欠点が生じる可能性があることに注意することが重要です。

解決策 2: Boost::Multi-Index

限られた数 (50) の要素を使用する特定のシナリオでは、Boost マルチインデックス ライブラリが堅牢なソリューションを提供します。複数のインデックスを持つコンテナーを作成できます。あなたの場合、次のコード スニペットは、挿入オーダーと一意の文字列識別子の両方を追跡するマルチインデックス コンテナーを定義する方法を示しています。

struct value_t {
  string s;
  int    i;
};

struct string_tag {};

typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // this index represents insertion order
        hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>>
    >
> values_t;
ログイン後にコピー

このマルチインデックス コンテナーにより、文字列識別子に基づいた効率的な検索が可能になります。 「random_access」インデックスを通じて広告掲載オーダーを保存します。

以上が特に要素数が限られている場合、std::map での挿入順序を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート