在插入順序至關重要的情況下,僅依賴 std::map 可能不夠。如果維護插入順序是首要任務,則可以考慮其他方法。
其中一個選項涉及在迭代和列印其值之前將映射的內容轉換為 std::vector。透過利用適當的函子,您可以使用 std::sort 根據元素的插入順序排列元素。
但是,如果快速查找是必需的(例如 1000 萬次),則使用向量可能會提高效能的擔憂。對於此類場景,boost::multi_index 庫提供了一種將映射的效率與多個索引的靈活性相結合的解決方案。
使用 boost::multi_index:
該程式庫可讓您為每個容器建立多個索引。在這種特定情況下,您可以定義一個包含string 和int 成員的value_t 結構,並使用兩個索引:
然後您可以像這樣實例化一個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中文網其他相關文章!