问题标签 [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.

0 投票
1 回答
163 浏览

algorithm - 多索引中的多个唯一键

我正在尝试将对象存储在boost multi-index容器中。

这些对象都是唯一的,可以通过 2 个单独的键(也是唯一的)检索。

当我尝试通过整数查找该索引的任何元素时,我使用以下代码

但它没有编译,我收到以下错误

当我对字符串使用相同的代码时,它可以正常工作;你知道我做错了什么吗?

0 投票
1 回答
1400 浏览

c++ - boost::multi_index_container:从任意索引中获取equal_range,只执行一次循环

我有一个multi_index_container看起来基本上是这样的:

我实例化这样一个容器并像这样使用它的索引:

现在,在运行时,我想对equal_range两个索引之一进行操作。实际使用哪个索引,取决于当前配置。我想要完成的是这样的:

我不知道该怎么做。事实证明, 的返回类型index1.equal_range是一对与 . 返回的迭代器不同的迭代器index2.equal_range。两者有共同的基本类型吗?看看我的例子,应该是什么SomeType样子?我不想for在我的代码中为可能使用的每个索引重复循环。

0 投票
0 回答
211 浏览

c++ - 如何将具有多个索引的 std::map 转换为 boost::multi_index_container

我需要一些指导来获得以下我在Coliru上使用boost::multi_index_container. 现场示例有 2 个部分,一个简单的稍微修改的示例,boost::multi_index_container至少我可以得到一个在 coliru 上工作的 Boost 现场示例——它还指定了一对非常简化的索引。其次,我有一堂课,我正在努力适应使用multi_index_container. IndexContainer本质上,它的核心包含类中以下 typedef 的a std::mapof sstd::map

该类IndexContainer具有修改地图容器的底层地图的updateFileInfo方法。有趣的结构包含 4 个单独的索引,我希望能够使用上述指定的 4 个索引之一独立地遍历 s,但我不确定如何更改基于简单员工的示例,例如开始基于s 和 tuples 的组合做一些事情。getFileInfoFileInfoIndexQuartetLoadableFileIndexQuartetstd::setstd::map

任何有关我如何做到这一点的帮助或指导将不胜感激。

0 投票
1 回答
533 浏览

c++ - 使用带有 std::unique_ptr 元素的 boost::multi_index::multi_index_container 的初始化列表

尝试使用初始化列表将值分配给包含任何类型元素的boost::multi_index::multi_index_container对象时出现编译错误。std::unique_ptr

这是一个简短的示例(也可在Wandbox上找到):

如上所示,一次插入一个对象是insert()可行的,但我真的不想这样做。

我正在使用 Boost 1.56.0 并使用 Visual C++ 12.0 (Visual Studio 2013 Update 3) 进行编译。但是,使用 Clang 3.4 或 GCC 4.9.0 进行编译会导致基本相同的错误。

这是 Clang 的输出(为了便于阅读而选择):

恐怕我不太明白这里发生了什么。为什么要调用复制构造函数?这只是Boost的限制吗?是否有任何可行的解决方法——特别是可以与我的目标编译器 Visual C++ 12.0 一起使用的解决方法?

0 投票
1 回答
50 浏览

boost-multi-index - 使用带有 Boost multi_index 的子级结构索引

我正在尝试使用 Boost multi_index 解决问题。如果我有2个结构如下:

如何使用 MyStruct2::bx 定义索引?这可能吗?

正在尝试类似的东西:

但这不起作用。

感谢您提供任何信息/建议。

0 投票
1 回答
87 浏览

c++ - boost::multi_index_container 是否连续存储在内存中?

我正在寻找一种用于快速迭代时间的连续数据结构,并结合通过密钥进行快速随机访问。此外,我需要有效地从索引中取回密钥。目前,我使用标准库中不同集合的组合。

这可行,但它需要一些胶水代码,并且可能不会尽可能快。似乎boost::multi_index_container正是我需要的。但是,它是否将值连续存储在内存中?

0 投票
3 回答
7781 浏览

c++ - Boost 多索引容器与基于 std::unordered_map (map of maps) 的多级映射容器

我最近发现了 boost::multi_index_container ,我很好奇他的性能与我自己实现的基于多级映射的类似容器相比,并定义为:

键顺序并不重要。快速查找很重要,为此我使用了类似的东西:

我想知道会是什么

  • boost::multi_index_container 最接近的配置以匹配我的实现
  • 按主键和辅助键搜索的最快方法。

我尝试配置模板,但不确定这是否是最佳解决方案:

0 投票
1 回答
804 浏览

c++ - 使用提升多索引,如关系数据库

这是我试图模拟的情况:

COL1 - 是 ID,对于给定的 ID,可以有多个符号。
COL2 - 符号,它们是唯一的
COL3 - 一个符号的更新时间,两个不同的符号可能同时更新,因此它们不是唯一的。

我的目标是获取最活跃的代码,比如说在过去 60 秒内更新的符号。为此,我使用了 boost 多索引。

头文件:

.cpp 文件

我将插入到 boost 多索引中的记录的结构

现在在函数 get_active_ticker_count() 我想指定像 CBT.151.5.T.FEED 这样的键,它应该返回:

让我们假设 t1 > t2 > t3 > t4,那么我想找出时间大于 t3 的集合,并且还想找到这些符号的计数。我该如何进行相同的操作,我已经能够插入,但我被检索部分卡住了。请帮忙!

0 投票
2 回答
693 浏览

c++ - 提升 multi_index_container 的性能

我有兴趣了解 multi_index_container 在以下用例中的性能:

我需要一张地图来保存对象,对象的数量应该在 300,000 以上。而每个对象都有 1 个唯一键和 3 个属性。钥匙详情:

  1. 唯一键是“唯一”作为名称
  2. 每个属性只有几个可能的值,比如只有 16 种组合。因此,对于 300,000 个对象,每个组合将有一个包含 300,000/16 个对象的列表
  3. attribute1 偶尔需要从一个值修改为另一个值
  4. 对象查找总是通过 unique_key 完成,而 composite_key 用于迭代具有一个或多个属性的对象

对于这样的用例,multi_index_container 非常适合,因为我不需要独立维护多个地图。对于唯一键部分,我相信 hashed_unique 是一个很好的候选者,而不是 ordered_unique。

但我对“ordered_non_unique”部分非常不舒服。我不知道如何在 boost 中实现。我猜它提升了在单个列表中为类似于 unordered_map 的每个组合维护一个对象列表(如果它太天真,请原谅我!)。如果是这种情况,修改现有对象的属性将是一个很大的痛苦,因为它需要 1) 为特定组合检查一长串对象 2) 执行相等比较 3) 并移动目标组合。

我怀疑具有高延迟的步骤:

我担心的是,最后一个“修改”函数是否有一些线性行为,如所说的在一个组合下通过一些潜在的长对象列表......

0 投票
2 回答
626 浏览

c++11 - boost::multi_index_container 擦除函数重做?

我有以下问题:我定义了一个 boost::multi_index_container,这里是一个简化的定义,它TYPE通过一个成员函数指针散列 a,&TYPE::m_id其中m_id是一个整数类型

当我通过以下方式删除对象时:

当擦除尝试重新哈希映射时,此代码似乎崩溃,有人知道这是否是一般行为,erase函数可能会在删除指针之前重新哈希,这将导致段错误,因为指针已被删除。 (当然解决方法是:移动delete下面的erase无论如何更合适!)

在分段错误之后,我得到了以下最后一条痕迹。

最后的堆栈跟踪输出: