微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C多索引映射实现

我正在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迭代器容器.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐