首頁 >後端開發 >C++ >如何維護 std::map 中的插入順序,尤其是元素數量有限的情況?

如何維護 std::map 中的插入順序,尤其是元素數量有限的情況?

DDD
DDD原創
2024-12-07 13:29:14285瀏覽

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

具有插入順序的std::Map

當元素順序很重要時,追蹤std::map 中的插入順序至關重要。雖然std::map 主要根據鍵值對元素進行排序,但有兩種可能的解決方案可以滿足您的要求:

解決方案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中文網其他相關文章!

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