Heim >Backend-Entwicklung >C++ >Wie behalte ich die Einfügereihenfolge beim Speichern von Schlüssel-Wert-Paaren in C bei?

Wie behalte ich die Einfügereihenfolge beim Speichern von Schlüssel-Wert-Paaren in C bei?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-07 01:02:11227Durchsuche

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

Eingefügte Schlüssel-Wert-Paare in der richtigen Reihenfolge mit std::map speichern

Ein std::map ist eine Containerdatenstruktur, die Schlüssel speichert -Wert-Paare in sortierter Reihenfolge basierend auf dem Schlüssel. Wenn jedoch die Einfügereihenfolge der Paare beibehalten werden muss, bietet die Karte diese Funktionalität nicht mehr.

Alternative Lösungen

  • std ::vector>: Die Verwendung eines Vektors zum Speichern der Paare bietet eine einfache Verfolgung der Einfügungsreihenfolge, aber Bei häufigen Suchvorgängen (10.000.000 Mal) kann es langsamer sein.
  • boost::multi_index: Diese Bibliothek stellt einen erweiterten Container bereit, der mehrere Indizes für dieselbe Datenstruktur ermöglicht. Es kann verwendet werden, um einen Index für die Einfügereihenfolge zu erstellen, wodurch es möglich wird, die Paare in dieser Reihenfolge zu iterieren und darauf zuzugreifen.

Codebeispiel:

Überlegen Dieses Code-Snippet verwendet den boost::multi_index-Ansatz:

#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;

In diesem Beispiel verwendet der Container „values_t“ zwei Indizes: ein Einfügungsreihenfolgeindex und ein Hash-eindeutiger Index für das s-Mitglied. Dies ermöglicht sowohl eine geordnete Iteration als auch effiziente Suchvorgänge mit der s-Taste.

Das obige ist der detaillierte Inhalt vonWie behalte ich die Einfügereihenfolge beim Speichern von Schlüssel-Wert-Paaren in C bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn