C++多索引映射实现
C++ multi-index map implementation
我正在C++11中实现一个多索引映射,我希望针对特定功能对其进行优化。我目前试图解决的问题是,不要多次存储关键元素。但让我解释一下。
这个问题产生于对直方图进行排序,以将它们以不同的组合覆盖。直方图有名称,这些名称可以划分为标记(属性)。
以下是我希望我的房产地图具有的功能:
- 能够以任何顺序循环属性
- 能够为每个属性返回具有唯一值的容器
- 按属性值到达的顺序累积属性值,但在填充映射后可以使用自定义比较运算符对属性进行排序
我在C++11中有一个使用std::unordered_map
和std::tuple
作为key_type
的工作实现。当属性值到达forward_list的元组时,我正在累积它们。其预期用途是对列表进行迭代以组成键。
我想介绍的优化是,只将属性的值存储在列表中,而不将它们存储在用作映射中键的元组中。我希望保持函数返回属性值列表的常量引用的能力,而不是一些包装器的列表。
我知道boost::multi_index有类似的功能,但我不需要在密钥到达时进行排序的开销。我希望新的属性值按顺序存储,并且只能在事后排序。我也研究过boost::flyweight,但在最简单的方法中,列表将是flyweight<T>
而不是T
,我不想这样做。(如果这是最好的解决方案,我肯定可以接受。)
我知道列表是稳定的,即一旦创建了一个元素,它的指针和迭代器仍然有效,即使在调用list::sort()
之后也是如此。知道了这一点,可以对映射做些什么来消除元组元素的冗余副本吗?自定义映射分配器在这里有帮助吗?
谢谢你的建议。
让您的映射从迭代器的元组到您的道具容器。
编写一个散列-取消对迭代器的引用并组合结果。
将正向列表道具容器替换为先按哈希排序,然后按内容排序的集合。
先在集合中查找,然后在散列中查找。
如果您需要不同的道具顺序,请使用另一个集合迭代器容器。
- 哈希映射如何在 c++ 中实现?
- 自定义哈希表实现-将字符串映射到整数时出现内存错误
- 在不创建新节点的情况下实现带有映射的trie
- 间隔映射实现
- 为什么此代码在此 Trie 实现中使用映射 c++ 中的指针崩溃?
- 映射构造函数,同时在C++中实现计数器
- 如何在这个哈希映射中实现 AVL 树
- 我的 A* 实现无法正确跟踪"camefrom"映射
- C++通过映射并使用中的方法从基类实现派生类
- 具有良好性能的c++映射实现
- 双向映射是否有更有效的实现
- 高效实现 64 位和 32 位无符号整数之间的双向映射
- 在vf2_sub_graph_iso中使用属性映射实现等效性
- 实现将字符串映射到 C++ 中的数组的哈希表。我一直在"Debug Assertion Failed",我不知道为什么
- 在使用无序多映射实现的有向图中查找循环
- 如何用tbb实现一个将键映射到不同类型值的并发哈希表
- C++多索引映射实现
- 要使用 boost::object_pool 实现映射的自定义分配器,如何使用 boost::object_pool 分
- 不允许使用比较实现C++映射不完整类型
- 使用双链表实现映射