ホームページ >バックエンド開発 >C++ >C でキーと値のペアを保存するときに挿入順序を維持するにはどうすればよいですか?

C でキーと値のペアを保存するときに挿入順序を維持するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 01:02:11227ブラウズ

How to Maintain Insertion Order When Storing Key-Value Pairs in C  ?

挿入されたキーと値のペアを std::map で順番に保存する

std::map はキーを保存するコンテナ データ構造です。 -キーに基づいてソートされた順序で値のペア。ただし、ペアの挿入順序を維持する必要が生じた場合、マップはこの機能を提供しなくなります。

代替ソリューション

  • std ::vector>: ベクトルを使用してペアを保存しますは簡単な広告掲載オーダーの追跡を提供しますが、頻繁な検索 (10,000,000 回) では遅くなる可能性があります。
  • boost::multi_index: このライブラリは、同じデータ構造です。これを使用して、挿入順序のインデックスを作成し、その順序でペアを反復してアクセスできるようにします。

コード例:

考慮してくださいboost::multi_index アプローチを使用したこのコード スニペット:

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/random_access.hpp>
#include <boost/multi_index/hashed_unique.hpp>

struct value_t {
  std::string s;
  int         i;
};

struct string_tag {};

typedef boost::multi_index_container<
  value_t,
  boost::multi_index::indexed_by<
    boost::multi_index::random_access<>, // Insertion order index
    boost::multi_index::hashed_unique<boost::multi_index::tag<string_tag>, boost::multi_index::member<value_t, std::string, &value_t::s>>
  >
> values_t;

この例では、values_t コンテナーは 2 つを使用します。インデックス: s メンバーの挿入オーダー インデックスとハッシュ化された一意のインデックス。これにより、順序付けられた反復と s キーによる効率的な検索の両方が可能になります。

以上がC でキーと値のペアを保存するときに挿入順序を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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