在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中文網其他相關文章!