首頁 >後端開發 >C++ >如何在保持高效率查找的同時保留映射中的插入順序?

如何在保持高效率查找的同時保留映射中的插入順序?

Susan Sarandon
Susan Sarandon原創
2024-12-03 16:17:11484瀏覽

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

在 std::map 中保留插入順序

在插入順序至關重要的情況下,僅依賴 std::map 可能不夠。如果維護插入順序是首要任務,則可以考慮其他方法。

其中一個選項涉及在迭代和列印其值之前將映射的內容轉換為 std::vector。透過利用適當的函子,您可以使用 std::sort 根據元素的插入順序排列元素。

但是,如果快速查找是必需的(例如 1000 萬次),則使用向量可能會提高效能的擔憂。對於此類場景,boost::multi_index 庫提供了一種將映射的效率與多個索引的靈活性相結合的解決方案。

使用 boost::multi_index:

該程式庫可讓您為每個容器建立多個索引。在這種特定情況下,您可以定義一個包含string 和int 成員的value_t 結構,並使用兩個索引:

  1. 隨機存取: 表示插入順序
  2. Hashed Unique:對字串成員建立索引以方便快速查找

然後您可以像這樣實例化一個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn