我正在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()之后也是如此.知道了,可以对地图做些什么来消除元组元素的冗余副本吗?自定义地图分配器可以帮助吗?
谢谢你的建议.