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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...