首頁 >後端開發 >C++ >如何在保持高效率查找的同時維護「std::map」中的插入順序?

如何在保持高效率查找的同時維護「std::map」中的插入順序?

Linda Hamilton
Linda Hamilton原創
2024-12-06 09:37:11205瀏覽

How to Maintain Insertion Order in a `std::map` While Preserving Efficient Lookups?

在std::map 中維護插入順序

在std::map<:string int> 的場景中如果無法保留插入順序,則需要保留此關鍵屬性的容器。而 std::vector>看起來是一個可行的替代方案,但其頻繁查找和增量操作的性能損失讓人對其適用性產生懷疑。

一個有效的解法是採用 std::map 和 std::vector 的組合。由於映射可確保高效的基於字串的查找,因此您可以在執行排序操作之前將映射內容複製到 std::vector 中。自訂函子可用於定義基於插入順序的排序邏輯。

或者,Boost 函式庫透過 boost::multi_index 提供了強大的解決方案。這允許對單一容器進行多個索引。在您的情況下,可以實現以下結構:

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

struct string_tag {};

typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // index representing insertion order
        hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>>
    >
> values_t;

這裡,random_access 索引維護插入順序,而 hashed_unique 索引確保唯一的字串識別碼以實現高效查找。這種方法提供了有效的查找和插入順序的保留。

以上是如何在保持高效率查找的同時維護「std::map」中的插入順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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