在插入顺序至关重要的情况下,仅依赖 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中文网其他相关文章!