具有插入顺序的 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中文网其他相关文章!