首页 >后端开发 >C++ >在 C 中存储键值对时如何维护插入顺序?

在 C 中存储键值对时如何维护插入顺序?

Patricia Arquette
Patricia Arquette原创
2024-12-07 01:02:11227浏览

How to Maintain Insertion Order When Storing Key-Value Pairs in C  ?

使用 std::map 按顺序存储插入的键值对

std::map 是存储键的容器数据结构-基于键排序的值对。但是,当需要维护对的插入顺序时,地图不再提供此功能。

替代解决方案

  • std ::vector>:使用向量来存储对提供了简单的插入顺序跟踪,但对于频繁查找(10,000,000 次)可能会更慢。
  • boost::multi_index:该库提供了一个扩展容器,允许在同一数据结构上使用多个索引。它可用于为插入顺序创建索引,从而可以按该顺序迭代和访问对。

代码示例:

考虑此代码片段使用 boost::multi_index 方法:

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/random_access.hpp>
#include <boost/multi_index/hashed_unique.hpp>

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

struct string_tag {};

typedef boost::multi_index_container<
  value_t,
  boost::multi_index::indexed_by<
    boost::multi_index::random_access<>, // Insertion order index
    boost::multi_index::hashed_unique<boost::multi_index::tag<string_tag>, boost::multi_index::member<value_t, std::string, &value_t::s>>
  >
> values_t;

在此示例中,values_t 容器使用两个索引:s 成员上的插入顺序索引和散列唯一索引。这允许通过 s 键进行有序迭代和高效查找。

以上是在 C 中存储键值对时如何维护插入顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn