需要选择一个容器来存储我的数据

哈伊瓦

我有一个数据,我需要对其进行搜索和排序。数据只是一堆结构对象,看起来像这样:

struct ContactInfo {
    std::string name;
    std::string description;
    std::string phoneNumber;
    std::string email;

    ContactInfo(std::string name, std::string phone, std::string email, std::string desc);
    ContactInfo();
};

如果将其保存在以“名称”为关键字的地图中,则通过“描述”,“ phoneNumber”或“电子邮件”进行搜索时,我将必须执行线性搜索。

我的问题是:我是否有更好的方法来保持数据的搜索速度更快?

马修M.

关联STL容器(mapunordered_map)是围绕单个索引的最典型情况构建的。

如果您希望在多个字段上建立索引,则有几种解决方案:

  1. 最简单:使用多个容器,每个容器都在自己的字段上建立索引,并保留记录的副本(更新记录变得很麻烦)
  2. 难一些:使用多个容器,每个容器都在自己的字段上建立索引并共享记录(std::shared_ptr<ContactInfo>
  3. 更难:与之前的相同,但是使用拥有记录的“主”容器以提高效率(并减少间接性)

对于您的情况,如果您必须更新记录,那么我将从(1)开始,然后移至(2)。

但是请记住,该更新是一项复杂的任务,因为每次更新记录时,都必须在已更新的字段上重新为其编制索引。为了简化查找​​,您可以在每个容器中保留一个引用该项目的迭代器,并使用这些迭代器进行擦除而无需进行查找:insert当您将项目放入map(或unordered_map,调用会返回此迭代器

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++需要一个容器来存储用户定义的函数

为什么我需要一个临时变量来存储 Random 方法的值?

我需要一个意图来选择特定格式的视频

在Supercollider中,我需要选择Ndef来播放并从列表中停止前一个

在D3中,为什么我需要选择选择一个虚拟对象来创建对象?

Bootstrap Grid,我需要一个容器吗?

需要用一个ArrayList来存储对象,赋值需要我用一个ArrayList,苦苦的从ArrayList中调用对象的方法

我需要帮助来理解一个公式

我需要一个等式来沿着椭圆运动

我需要节省多少存储空间来保存一个月的视频记录?

生成一个列表来存储输入数据

我需要帮助找到一个公式来格式化我的 Excel 数据库

是否有另一种方法可以替代.val(),我需要使用另一个值来选择一个类

如何选择一个好的Python列表数据结构来存储所有可能的Tic Tac Toe游戏

我需要填充一个选择器

mysqli:为什么我需要一个“ if”语句来创建一个表?

我需要一个main来创建一个静态库吗?

需要一个可调整大小的容器来存放std :: mutex

我如何通过从另一个表中为特定字段选择数据来插入表中

我需要通过存储适当的CityId而不是CityName将数据从一个旧表迁移到新表

我需要创建一个变量,该变量从数据集中的某些特定列中选择一个最接近另一特定列的变量

我需要一个 PHP 查询来从数据库中获取数据并在我的条形图中使用以获取结果

Java 8:如何更新链表中的数据,我需要提取前一个节点的数据来更新当前节点的数据

在Docker中创建我的第一个容器,需要一点帮助

需要一个二维[string] [int]数组来存储DateTimes

我如何获得一个docker容器来暴露一个端口,同时阻止整个互联网?

我需要一个文档准备工具来记录我的jersey rest网络服务

我是否需要创建一个对象来按我的“数字”元素排序?

我需要一个查询来显示标记表,这里是我的表