问题标签 [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++ - 不能对 boost::multi_index_container 的 find() 方法使用 const 参数
我有一个非常简单的多索引容器,它对类的成员进行索引,如下所示:
基类:
声明 multi_index_container 的类:
我的问题在于getAgentInfo()
这是一种访问器方法。错误很明显:
我无法输入一个非常
Agent*
量,因为我是从代码库的其他部分获取的。我不喜欢用
const_cast
有没有办法.find()
使用常量代理调用该方法?谢谢你
c++ - boost::multi_index_container - equal_range 值
我一直在尝试使用带有映射的 boost 进程间库以及现在共享内存中的 multi_index_container 的一些解决方案。使用 multi_index_container,除了迭代从 equal_range 返回的值之外,还有其他方法吗?我希望从我的 non_unique 索引(站名,例如 ST0012345)中检索结果子集,然后查找/获取我需要的实际测量类型(例如温度)。
我需要检索测量点的唯一 pointID 值(例如 ST0012345SMD10000456.VoltsA = pointID - 45789),以将测量值插入数据 Historian。我喜欢 multi_index_container 的想法,因为我们的消息有效负载包含数组中一个站的约 100 到 200 个测量值,所以我想我可以对包含 500,000 多个项目的共享内存容器进行一次调用,然后从一个使用长唯一字符串名称的小得多的列表。
从我所做的阅读看来,我可能只能遍历从 multi_index_container 返回的较小列表,而不是进行获取/查找。
如果是这种情况,我最好还是坚持我原来的共享内存映射解决方案(我正在使用),正如我所说,它包含 500,000 多个长字符串来匹配以检索我们的数据历史记录所需的 pointID。每秒处理 200 个点的数据速率很高(我发现我的数据映射查找在测试环境中每秒可以达到 2000 个查找)。
另外,如果我确实使用了地图,那么在共享内存中拥有几张地图有什么害处,例如悉尼车站的地图(约 300,000 点),纽卡斯尔车站的地图(约 200,000 点)。
下面是我的程序的代码,它从创建 multi_index_container 的单独进程中检索项目。
}
c++ - 使用 stl/boost 算法和容器模拟 sql(或其他 rdbms)的功能
我使用 stl 已经有一段时间了,但我刚刚开始了解 sql。
可以使用 stl/boost 容器和算法模拟 sql 功能吗?如果没有,限制从哪里开始?
例如,我可以通过简单地使用std::vector<std::unordered_map<std::string>>
甚至更好地使用 boost 多索引来创建数据库。
然后,可以用算法模仿sql操作:
- 哪里——std::copy_if
- 加入——std::set_union
可以使用惰性评估来优化查询。
我确实知道 sql 不在 ram 中。但如果数据库不是那么大,这并不重要。另外,还有stxxl。
所以我的问题主要是关于你什么时候停止使用stl/boost并切换到sql?
boost - boost::multi_index 容器中迭代器功能投影的复杂性
有谁知道 boost::multi_index 库中迭代器投影的复杂性?文档可以在这里找到boost::multi_index projection of iterators但它没有说明操作的复杂性。
基本思想是,您可以检索索引内对象的迭代器,然后将其投影到第二个索引中,并获取同一对象但在第二个索引内的迭代器。如果这是一个 O(1) 操作,那么您可以有效地维护两个索引,一个是可快速搜索的,一个是较慢的。据我了解,迭代器的投影允许我在索引中找到一个搜索速度更快的对象,然后将其投影到搜索速度较慢的索引中。
我很想知道它是否是迭代器投影的简单 O(1) 查找,或者它是否有效地启动了第二个索引中的查找操作,因此取决于您投影到的特定索引并且速度较慢比 O(1)。
非常感谢您的帮助!
c++ - 提升 multi_index_container 损坏的索引
我有一个 multi_index 容器。Chan::Ptr 是一个指向对象的 shared_pointer。该容器有两个带有对象函数的索引。
直到我只将对象 push_back 到容器中,容器中的所有搜索都是成功的。
当我修改对象中的值(例如:Chan::Channel 更改)时,索引将被破坏。用索引列出容器,返回错误的顺序。但是,查找功能不再起作用。
如何重新索引容器?(“rearragne”方法对索引不做任何事情)。
c++ - 如何制作一个 boost 多索引复合范围语句,相当于 where x AND y?
我有一组N
点在二维空间中任意分布。每个点都有一个关联的x
y
坐标。从任何一点,我都需要在给定距离内找到一组其他点r
。如果我不关心时间,我会将所有内容添加到 sqlite 数据库并运行select * from table where x between x1 and x2 and y between y1 and y2
,但根据我读过的内容,数据库的开销对于我的用例来说将是令人望而却步的(N~1e7,每个点都需要计算)。x
我可以通过条件或条件获得一系列点,y
但我不知道有一种优雅的方式来获得它们的交集。解决这个问题的最佳方法是什么?获得两个范围并应用一些交集算法?只需获取一个范围并迭代,只保留相关点?或者有什么方法可以使用 boost 多索引进行复合选择?
这是一个 MWE,它使用均匀随机点定义和填充多索引,并通过 x “查询”随机点。
c++ - std::unordered_map - 如何随时“跟踪”最大/最小键
我有std::unordered_map<int, int>
。我不想使用其他结构,如树或其他任何导致延迟要求的结构。但在任何时候我都需要知道当前的最大键和最小键。我怎样才能做到这一点?分布不是均匀的,而是经常删除和插入最大值和最小值。因此,我需要比“删除当前最大/最小值时仅扫描整个地图以获取新的最大/最小值”更智能的东西。
我不想使用任何其他结构。我想用std::unordered_map
!
根据答案更新创建了这样的结构:
c++ - 向现有的多索引容器添加更多索引
我目前正在使用 Boost::multi_index_container 并且它工作得很好。但是我想封装代码并创建一个看起来像这样的模板类
本质上,此包装器中使用了预定义的索引,但是对于专门的 T,我还想添加其他索引。是否可以添加其他索引myTable
?也许额外的模板参数?但附加指数的数量是未知的。