我正在 C++11 中实现多索引映射,我希望针对特定功能对其进行优化。我目前正在尝试解决的问题是不要多次存储关键元素。但让我解释一下。
问题源于对直方图进行排序以将它们叠加在不同的组合中。直方图有名称,可以分为标记(属性)。
以下是我希望我的属性图具有的功能:
- 能够以任意顺序循环属性;
- 能够返回每个属性具有唯一值的容器;
- 按属性值到达的顺序累积属性值,但能够在填充地图后使用自定义比较运算符对属性进行排序;
我有一个工作实施在 C++11 中使用std::unordered_map
with std::tuple
as key_type
。当属性值到达前向列表元组时,我正在累积它们。预期用途是迭代列表以组成键。
我想介绍的优化是仅将属性的值存储在列表中,而不将它们存储在用作映射中的键的元组中。我希望保持让函数返回对属性值列表的 const 引用的能力,而不是某些包装器的列表。
我知道提升::多索引具有类似的功能,但我不需要键到达时进行排序的开销。我希望按顺序存储新的属性值,并且只能在事后进行排序。我也看过提升::蝇量级,但在最简单的方法中,列表将是flyweight<T>
代替T
,我不想这样做。 (如果这是最好的解决方案,我绝对可以接受。)
我知道列表是稳定的,即一旦创建了一个元素,它的指针和迭代器仍然有效,即使在调用之后也是如此list::sort()
。知道了这一点,可以对映射做一些事情来消除元组元素的冗余副本吗?自定义地图分配器可以在这里提供帮助吗?
感谢您的建议。
让你的映射从迭代器元组到你的 prop 容器。
编写一个散列,取消引用迭代器并组合结果。
将前向列表属性容器替换为首先按哈希排序,然后是内容的集合。
首先在集合中查找,然后在哈希中查找。
如果您需要不同的 props 顺序,请使用另一个集合迭代器容器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)