问题标签 [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 多索引的有序索引中插入的匹配函数
我有一个关于提升多索引中的序列索引的非常简单的问题。代码如下:
我的类存储在 Link.hpp 中:
和主要功能:
编译,当 sequenced<> 存在时,会产生一个我不明白的错误。你能帮我吗?
错误:
c++ - 在没有迭代器的情况下访问 boost 多索引容器
抱歉,如果这是一个 newB 问题,请考虑以下代码:
例如,我想访问容器中的第 10 个元素。我还必须使用迭代器吗?或者是否可以以类似数组的方式访问特定的序列元素(或任何其他方式......请建议)感谢您的帮助 vahid
c++ - 一个键上的equal_range,提升multi_index_container Composite_key中另一个键的下限/上限
假设我有以下内容:
这将给我一个迭代器范围,其中每个迭代器都指向一个名为“Bob”的人,出生于 '01/15/65'。
如果我想要一个迭代器范围,它给我容器中名为“Bob”但出生在“01/01/65”和“01/31/65”之间的所有人怎么办?这实际上是 'Bob' 上的 equal_range,但生日时的下限和上限。这可能吗?如果是,请解释如何?
谢谢!
c++ - 一个多索引,其中一个索引是整个集合的子集
我想用两个sequenced
视图构建一个多索引,我只能从一个视图中删除值。
在代码中:
这样的事情可能boost::multi_index
吗?
c++ - 多个查找集
我需要一个数据结构,但我不确定该选择什么。从根本上说,我的需求与 类似std::set
,只是我需要同时在同一数据上根据多个不同的比较器进行查找。
现在我决定去买一些kludge-astd::map<float, std::unordered_set<T>>
然后a std::unordered_map<T, std::unordered_set<T>*>
。这应该允许 O(log N) 查找 afloat
和 O(1) 查找/删除 a T
。
有没有更好的数据结构可以使用?这上面写满了“hack”。
顺便说一句,这段代码对性能非常关键,所以非常感谢快速的东西。
编辑:我一直在戳,boost::multi_index
这就是我到目前为止所得到的:
node_comparator
in_scope lambda在哪里。但是试图编译它会导致一些光荣的错误。
这只是第一个;有很多,但我很清楚 Visual Studio 倾向于让一个错误导致 9999999 更多。
c++ - 如何修改boost多索引的只读元素?
我刚刚注意到我无法在 boost 多索引容器元素中进行更改。这是真的?(基于以下简化代码)查看“更新”功能:
无需通过整个程序。请注意,在更新方法中,我收到此错误: multiIndex$ c++ exp2.cpp exp2.cpp: In member function 'void sim_mob::Phase::update(double)': exp2.cpp:69:29: error : 在只读对象中分配成员 'sim_mob::linkToLink::currColor'
我刚刚在boost 教程 中读到迭代器只授予 const 访问权限。我该如何解决这个问题?谢谢您的帮助
c++ - 返回 boost multi_index 接口时 C++ 中的 const 混淆
我在对变量进行 const 操作时遇到问题。我已将问题简化为以下程序:
假设变量a1 必须是常量,我得到编译错误:
如果您能帮我解决问题,我将不胜感激。谢谢
java - Java LinkedHashSet 索引有效性
我一直在将大量 Java 代码移植到 C++ 中,并且在我离开时不得不实现 LinkedHashSet 之类的东西。我使用 Boost 的多索引容器对 LinkedHashSet/Map 进行了合理的复制。
当我移植代码时,我遇到了一些有趣的东西,其中包含 multi_index,因为包含的对象不是可变的(除非您将类的特定字段标记为可变)。但是,如果密钥是从包含的类的一些可变成员中计算出来的,那么事情就会变得有趣。
为了澄清一些事情,我想我会用 Java 写一个简单的例子来检查他们的 LinkedHashSet 的行为。结果让我有点惊讶;看起来它们的行为类似于 Boost 的多索引容器,因为在修改包含的对象时不会重新生成索引(如您所料);然而,编译器并没有以任何方式抱怨——似乎很容易让自己陷入困境(我正在移植的代码似乎犯了上述罪过,谁知道它仍然是如何工作的)。
这只是 Java 中缺少 const_iterators 的限制,还是我设法做了一些特别愚蠢或棘手的事情?
这是一个简单的例子:
它打印出以下内容:
有趣的是,它知道 Baz 变了;但是它仍然没有找到 Baz2。
显然这是人为的,但我正在查看的非常合理的代码似乎(通过多个间接)导致了这个问题。使用 Boost Multi Index 至少你必须 const-cast 一个迭代器来导致这个!
c++ - 提升对散列唯一索引的多索引访问
此代码取自 boost 多索引“mru”示例:
http://www.boost.org/doc/libs/1_46_1/libs/multi_index/example/serialization.cpp
我的代码与 boost::unordered_map 类似,但我真的很想从这个例子中添加 mru 功能。
我想让这段代码尽可能地接近 boost::unordered_map 。对我来说,关键特性是 unordered_map 的 [] 运算符。
main() 的最后几行被打破,每行上方作为评论是我的问题。
在此先感谢所有答案评论。
c++ - 为固定大小的多索引多态容器提升多索引
仍在深入研究 C++/boost,因此欢迎任何评论/反馈。
我正在玩 boost::unordered_maps 并使用形状创建了一个多态示例,大约在我(主要)围绕它的时候,我偶然发现了来自 boost multi_index 的 mru 示例。 http://www.boost.org/doc/libs/1_46_1/libs/multi_index/example/serialization.cpp
那时我想。嗯,一个固定大小的多索引多态容器,它将丢弃基于 LRU 的值,这听起来很疯狂,无法实现。
在完成了很多工作之后,我仍然有以下问题。
在 insert() 中,有没有办法从序列迭代器中获取 hashed_unique 迭代器,以便我可以直接调用擦除?
有没有更好的方法实现查找?如果我可以只使用键来进行类似 boost::unordered_map 的查找,而不是仅仅为了查找而创建一个虚拟形状,那就太好了。
get<> 的正确路径是什么(请参阅代码中的 XXX 注释)我尝试了所有正确的方法,然后开始尝试随机废话,但没有任何结果。
我真的很想要一个 [] 运算符,但我认为这是一个方法... shape[cptr1->pos] = cptr1;
如何从我的 hash_index::iterator 中获取项目(或一般意义上的),打印它当然没有帮助......
p itr $1 = {, std::allocator > > >, boost::multi_index::detail::bucket_array > > >, boost::shared_ptr, long, boost::shared_ptr const*, boost::shared_ptr const&>> = {, std::allocator > > >, boost::multi_index::detail::bucket_array > > >, boost::shared_ptr const*, boost::iterator, long, boost::shared_ptr const*, boost::shared_ptr const& > >> = {, std::allocator > > >, boost::multi_index::detail::bucket_array > > >, boost::shared_ptr const*, boost::iterator, long, boost::shared_ptr const*, boost ::shared_ptr const&> >> = {, std::allocator > > >, boost::multi_index::detail::bucket_array > > >, boost::incrementable, std::allocator > > >, boost::multi_index: :detail::bucket_array > > >, boost::dereferenceable, std::allocator >> >, boost::multi_index::detail::bucket_array > > >, boost::shared_ptr const*, boost::iterator, long, boost::shared_ptr const*, boost::shared_ptr const&> > > >> = { , std::allocator > > >, boost::multi_index::detail::bucket_array > > >, boost::dereferenceable, std::allocator > > >, boost::multi_index::detail::bucket_array > > >, boost::shared_ptr const*, boost::iterator, long, boost::shared_ptr const*, boost::shared_ptr const&> > >> = {, std::allocator >> >, boost::multi_index::detail:: bucket_array > > >, boost::shared_ptr const*, boost::iterator, long, boost::shared_ptr const*, boost::shared_ptr const&> >> = {, long, boost::shared_ptr const*, boost::shared_ptr const&>> = {, long, boost::shared_ptr const*, boost::shared_ptr const&>> = {, long, boost::shared_ptr const*, boost::shared_ptr const&>> = {}, }, }, }, }, }, }, }, }, node = 0x60a010, buckets = 0x7ffffffdd88 }