问题标签 [boost-multi-index]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 大数据集小数据的多重索引:空间效率低下?
我根本不是数据库设计方面的专家,所以在我尝试用 CS 术语翻译它之前,我会用简单的语言表达我的需求:我正在尝试找到正确的方法来快速迭代大型子集(比如 ~100Mo 的 double ) 的数据,在一个可能非常大的数据集中(比如几个 Go)。我有基本上由 4 个整数(键)和值组成的对象,一个简单的结构(1 双 1 短)。由于我的键只能采用少量值(数百个),我认为将我的数据保存为树是有意义的(键为 1 个深度,值是叶子,至少在我的幼稚视图中很像 XML 的 XPath) .
我希望能够根据键值/这些键值的函数遍历叶子子集。要过滤的组合键会有所不同。我认为这称为横向搜索?
因此,为了避免比较 n 次相同的键,理想情况下,我需要通过键的每个排列来索引数据结构(12 种可能性: !4/!2 )。这似乎boost::multi_index
是为了什么,但是,除非我忽略了 smth,否则这样做的方式实际上是构建这 12 个树结构,将指向我的值节点的指针存储为叶子。考虑到与键相比,我的值很小,我想这将是非常空间效率低下的。
任何关于我应该使用的设计/数据结构的建议,或者关于这些主题的简明教育材料的指针都将非常感激。
c++ - Boost::Multiindex vs 字符串索引 boost::unordered_map
我需要一个包含唯一元素的容器,以便使用三元组 int 访问,并且每个 int 可以超过 1.000.000.000。
(实际上只有少数元素会被填充,实际上这些元素本身就是 boost::unordered_map )。
拥有像 boost::multiindex (或者我不知道的其他东西)这样的多索引数组或者只是一个以组合字符串作为键的 boost::unordered_map 是否更快?
c++ - Boost.MultiIndex:使用多个字段搜索元素
我正在使用 Boost multi_index 容器根据 2 个整数键 K1 和 K2 存储对象。我可以轻松地检索满足“K1 == X”的所有元素的迭代器,例如,通过获取第一个索引并使用 find() 函数(K2 的同义词和值 Y),但我正在寻找一种方法在满足 K1 == X 和 K2 == Y 的所有元素上获取迭代器。一个明显的解决方案是在满足 K1 == X 的所有元素上获取迭代器,然后使用谓词 K2 == Y 构建 boost::filter_iterator,但是有没有办法只从 Boost.MultiIndex 中做到这一点(也许更有效)?
谢谢
马蒂厄
c++ - multi_index_container 和虚拟列表控件
我很难使用 multi_index_container。
这基本上是我需要的:
- 虚拟列表控件。
- 以多种方式对项目进行排序(所以我想使用 multi_index_container)。
- 根据项目在列表控件中的排序和显示方式随机访问项目。
- 保持项目的原始插入/记录顺序。
- 在列表控件中移动项目、插入和删除项目(并相应地更新容器)。
到目前为止,我一直在同步使用多个向量/映射(显示列表位置映射到真实数据等),所以移动到 multi_index_container 会非常好。
我尝试编写原始代码的最小版本(或尝试编写它)。
非常感谢您对此的任何帮助!:)
c++ - BOOST 多指标
我正在尝试使用 Boost 的多索引容器进行快速查找,但我很难找到。我发现一些文档有点令人困惑。这是我所拥有的:
所以现在如果我尝试搜索所有的dummreport报告,我会出现错误:
我这样做对吗?我需要一个循环来获取该类型的所有报告吗?还是我完全滥用了这个?
谢谢
boost - 共享内存中的`boost::multi_index_container`?
我会对共享内存中的多索引容器之类的东西感兴趣。
是否可以分配,例如,boost::multi_index_container
在共享内存中,以便不同的可执行文件可以读取/写入其数据?如何?
谢谢。
c++ - 在 C++ 中具有哈希映射的复合键
我有一个数据结构,
由于书名或作者可以重复,我想构建一个复合键。(假设我不能制作额外的唯一键,例如 ID)
由于数据非常庞大,为了速度,我使用 GCC unordered_map,我构建了这样的结构:
一般来说,一切正常,但是当我想引用一个特定的键时就会出现问题。
例如,假设我想在标题为“数学”的书籍中找到评分最高的书籍,或者我想找到“托尔斯泰”书籍的平均收视率。
在这种情况下,这变得非常麻烦,因为我不能只引用其中一个密钥对。
我碰巧找到了,boost::multi_index
但我在理解这些文件时遇到了一些麻烦。有没有人对此有一些想法或指导?
制作多个索引的解决方案,multi_index 的简洁示例,任何其他方法等。任何帮助将不胜感激。
谢谢你。
c++ - 提升::multi_index。更快的解决方案?
我昨天发布了一个问题,我通过使用 multi_map 解决了这个问题: 在 C++ 中拥有一个哈希映射的复合键
这就像一个魅力,但是当 datasrt 足够大时,问题就会发生。
我的数据集大约有 10M 大,有序索引需要 +350 秒,而散列索引(无序)需要 80 秒才能插入。
与只需要 25 秒的 map(pair, double) 数据结构相比,这是一个相当长的时间。
有人知道提高计算速度吗?内存消耗还可以,但速度对我来说真的很重要。
c++ - 探索 boost::multi_index 时的 SIGSEGV
我一直在拔头发来找出这个段错误,并决定寻求帮助。
我有一个boost::multi_index
容器,其中包含(string, string, double)
并且在某些时候遇到了段错误。
这是我的代码的简化版本:
这段代码看起来工作得很好,但它只有在遇到某个特定的令牌时才会崩溃。(相反地,当它不符合令牌时它永远不会崩溃)。
我猜这是因为it
超出了容器本身的范围,但不明白它是如何发生的。
GDB 错误消息显示:
当我调用 while 条件时,它显然会崩溃it->str1()
,而不是因为令牌向量。我怎样才能防止这种情况?我试图在if(it == myContainer.get<str1>().end()) break;
下面添加*it++
,但没有帮助。
有人能给我一些线索吗?
谢谢!