什么是可以处理随机访问和密钥搜索的数据结构?

时间:2013-12-05 21:00:21

标签: c++ data-structures

我正在开展在线数据流分析项目,我有一个非常有趣的问题:

我需要维护(至少)一个查找表,例如std::map <user_id, user>,其中

struct user{
   int user_id;
   bool sex;
   int age;
   double score;
};

使用user_id作为密钥,将频繁添加和删除新用户。我想这很容易。

但是,我还需要按性别和年龄对用户进行分类,例如组合密钥。该计划的输出将 密集 查询类似于&#39;给我所有34岁的男性用户&#39;。请注意,此部分非常复杂。

我看了boost::multi-index,发现它就像一个黑盒子,模板真的让我很困惑。

有没有办法可以自己定制多索引样式的数据结构?任何人都知道如何实现它?

2 个答案:

答案 0 :(得分:3)

说真的,你认为哪个更容易?

1)通过阅读文档,在互联网上搜索示例来学习提升。

2)尝试构建自己的多索引类。

当我说更容易时,我的意思是更容易(i)编程,(ii)维护,(iii)交给同事。

学习提升!祝你好运。

[顺便说一句,Boost通常被视为新功能的测试平台,最终成为C ++标准库的一部分。例如,shared_ptr。]

答案 1 :(得分:0)

我个人会建立自己的数据结构;如果这是你在网上找到的问题 - 我认为这就是重点......

这是一个想法:由于年龄范围有限(如0..100),建立一个指针数组user * database[100];使用索引来保持数据按年龄排序;例如dataBase [20]将容纳20岁的所有用户。 对于特定年龄的所有用户,您可以使用链接列表来容纳所有用户,或者构建二叉树并按性别对其进行排序(左侧为M,右侧为F)..或您可以想到的任何内容...

这样,获得年龄x的用户是O(1)+ O(计数)。 关于年龄+性别或年龄+分数的更复杂的查询变得更有效率。实际上,最糟糕的情况是针对不涉及年龄的查询,因为您必须扫描所有数组。