加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C多索引映射实现

发布时间:2020-12-16 07:11:07 所属栏目:百科 来源:网络整理
导读:我正在C 11中实现一个多索引映射,我希望针对特定功能进行优化.我目前要解决的问题是,不要再存储一次关键元素.但让我解释一下. 问题产生于排序直方图以不同的组合覆盖它们.直方图有名称,可以分成标记(属性). 以下是我希望我的属性映射具有的功能: 能够以任何
我正在C 11中实现一个多索引映射,我希望针对特定功能进行优化.我目前要解决的问题是,不要再存储一次关键元素.但让我解释一下.

问题产生于排序直方图以不同的组合覆盖它们.直方图有名称,可以分成标记(属性).

以下是我希望我的属性映射具有的功能:

>能够以任何顺序循环遍历属性;
>能够为每个属性返回具有唯一值的容器;
>按照到达的顺序累计属性值,但是可以在填充地图后使用自定义比较运算符对属性进行排序;

我使用std :: unordered_map和std :: tuple作为key_type在C 11中有一个working implementation.当他们到达一个forward_lists元组时,我正在累积属性值.预期用途是迭代列表以组成键.

我想介绍的优化是仅在列表中存储属性的值,而不是将它们存储在用作映射中的键的元组中.我想保持函数返回const引用到属性值列表的能力,而不是一些包装器的列表.

我知道boost::multi_index具有类似的功能,但是当密钥到达时我不需要排序的开销.我希望按顺序存储新的属性值,并且只能对postfactum进行排序.我也看了boost::flyweight,但是在最简单的方法中,列表将是flyweight< T>而不是T,我不想那样做. (如果这是最好的解决方案,我绝对可以忍受它.)

我知道列表是稳定的,即一旦创建了一个元素,它的指针和迭代器仍然有效,即使在调用list :: sort()之后也是如此.知道了,可以对地图做些什么来消除元组元素的冗余副本吗?自定义地图分配器可以帮助吗?

谢谢你的建议.

解决方法

让你的地图从迭代器的元组到你的支柱容器.

写一个散列,取消引用迭代器并组合结果.

将前向列表prop容器替换为首先对哈希进行排序的集合,然后是内容.

首先在集合中查找,然后在哈希中进行查找.

如果你需要一个不同的道具订单,请拥有另一个set迭代器容器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读