Heim >Backend-Entwicklung >C++ >Wie kann ich die Einfügereihenfolge in einer std::map beibehalten, insbesondere bei einer begrenzten Anzahl von Elementen?

Wie kann ich die Einfügereihenfolge in einer std::map beibehalten, insbesondere bei einer begrenzten Anzahl von Elementen?

DDD
DDDOriginal
2024-12-07 13:29:14285Durchsuche

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

std::Map mit Einfügereihenfolge

Das Verfolgen der Einfügereihenfolge in einer std::map ist entscheidend, wenn die Reihenfolge der Elemente wichtig ist . Während std::map Elemente in erster Linie nach Schlüsselwerten sortiert, gibt es zwei mögliche Lösungen, um Ihre Anforderungen zu erfüllen:

Lösung 1: Verwendung von std::Vector

Obwohl Sie erwähnten Bedenken hinsichtlich der Leistung bei der Verwendung von std::vector aufgrund häufiger Suchvorgänge und Inkremente. Ein std::vector in Verbindung mit einem benutzerdefinierten Komparator kann die Einfügereihenfolge beibehalten. Es ist jedoch wichtig zu beachten, dass dieser Ansatz tatsächlich zu Leistungseinbußen führen kann, wenn die Anzahl der Elemente erheblich zunimmt.

Lösung 2: Boost::Multi-Index

Für Ihr spezifisches Szenario mit einer begrenzten Anzahl von (50) Elementen bietet die Boost-Multi-Index-Bibliothek eine robuste Lösung. Es ermöglicht die Erstellung eines Containers mit mehreren Indizes. In Ihrem Fall zeigt der folgende Codeausschnitt, wie Sie einen Multi-Index-Container definieren, der sowohl die Einfügereihenfolge als auch eindeutige Zeichenfolgen-IDs verfolgt:

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;

Dieser Multi-Index-Container ermöglicht effiziente Suchvorgänge basierend auf der String-ID Beibehaltung der Einfügungsreihenfolge durch den Index „random_access“.

Das obige ist der detaillierte Inhalt vonWie kann ich die Einfügereihenfolge in einer std::map beibehalten, insbesondere bei einer begrenzten Anzahl von Elementen?. 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