问题标签 [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 投票
2 回答
1470 浏览

c++ - 使用值为 std::shared_ptr 的映射是否是具有多索引类列表的良好设计选择?

问题很简单:我们有一个类,它有成员 a,b,c,d... 我们希望能够快速搜索(键是一个成员的值)并通过为 a或 b 或 c ...我想拥有一堆
std::map<decltype(MyClass.a/*b,c,d*/),shared_ptr<MyClass>>.

1)这是个好主意吗?

2) boost multi index 在各个方面都优于这种手工制作的解决方案吗?

出于简单/性能的原因,PS SQL 是不可能的。

0 投票
0 回答
2677 浏览

c++ - 映射支持 C++ 中每个值的多个键

我正在寻找一个现成的关联映射容器,它支持映射到单个值的多个键(别名)。

如果没有现成的解决方案,我可能不得不求助于使用 2 个单独的地图还是有更好的方法?

似乎 std::multimap 与我想要的相反。

这个几乎相同的问题有一个公认的 boost::multi_index 答案,但我查看了文档,对如何使用它完全感到困惑。

如果 multi_index 可以帮助我实现这一点,有没有人有一个例子?

0 投票
1 回答
1041 浏览

c++ - Boost MultiIndex 作为 LRU 缓存的 C++ 索引排序问题

我在这个例子中使用 Boost.MultiIndex 实现了以下 LRU 实现。

问题是当我更改 index_by 部分的顺序(并相应地更新枚举 index_idx)时,我在包含以下内容的行上收到错误:

通过以下诊断:

错误 1 ​​错误 C2661: 'boost::multi_index::detail::sequenced_index::insert' : 没有重载函数需要 1 个参数 c:\code\code.cpp 79

代码如下:

修改后的索引排序:

0 投票
1 回答
277 浏览

boost - boost::bind - 获得对成员变量的写访问权?(如 boost::multi_index::member)

只是出于好奇,有没有办法通过 获得对成员变量的写访问权限boost::bind?我可以通过 得到它boost::multi_index::member,但也想知道其他方法。

例子:

输出:

0 投票
2 回答
3056 浏览

c++ - 使用迭代器从提升多索引中删除项目时的一致性

我知道以下代码不正确,对于 std::vectors 和更普遍的所有 STL 容器:

因为在擦除和元素之后需要更新迭代器。

我想知道提升多索引是否相同,例如以下内容是否正确:

我想确保很好地理解文档的以下段落:http: //www.boost.org/doc/libs/1_51_0/libs/multi_index/doc/tutorial/indices.html#guarantees 这似乎说明了我可以在不使迭代器无效的情况下擦除。但是我不确定是否因为我删除了一个元素,我应该在迭代期间访问的另一个元素可以移动到当前迭代器的位置之前并且永远不会被访问(换句话说,通过在迭代期间擦除一些元素,我仍然确定要遍历所有元素吗?)。

谢谢!

0 投票
1 回答
634 浏览

boost - 提升 multi_index hashed_unique 与 unordered_map 查找性能

boost::unordered_map's 和 boost::multi_index容器(具有散列唯一索引)的查找性能是否相同。我想在boost::multi_index容器中您必须进行两次查找:首先,在表示散列索引的表中(并包含指向与该键关联的实际值的指针)和第二次查找,因为您需要遵循该指针才能达到您的价值。似乎该boost::unordered_map实现可能会避免第二次查找(因此会更快)。

0 投票
2 回答
329 浏览

c++ - 用于字符串实习的容器

我的目标是进行字符串实习。为此,我正在寻找一个可以执行以下操作的散列容器类:

  • 每个节点只分配一块内存
  • 每个节点不同的用户数据大小

值类型如下所示:

每个 String 对象都有不同的大小。这将通过 operator new + Placement new 来完成。所以基本上我想自己分配Node,稍后再推入容器中。

以下容器不适合:

  • std::unordored_set
  • boost::multi_index::*

    无法分配不同大小的节点

  • boost::intrusive::unordered_set

    一开始似乎有效。但有一些缺点。首先,您必须自己分配存储桶数组并维护负载因子。这只是不必要且容易出错。

    但另一个问题更难解决:您只能搜索具有 String 类型的对象。但是每次查找条目时分配一个字符串效率低下,并且您只有一个 std::string 作为输入。

是否有任何其他散列容器可用于此任务?

0 投票
3 回答
471 浏览

c++ - 存储在文件中的 boost multi_index_container 的持久性

我可以依赖在内存映射文件中分配的 boost multi_index_container 吗?这种“数据库”可以在具有相同字节序的计算机之间移植吗?

0 投票
2 回答
1448 浏览

c++ - 清除 multi_index_container

我的代码(不是我的代码)中有一个类使用 boost multi_index_container

};

假设所有变量和类型都已正确定义。我不想弄乱片段。该代码实际上有效。我想要做的是添加一个clear函数来擦除所有元素。

有人可以帮忙吗?我收到一个 100 行错误!

0 投票
1 回答
422 浏览

gdb - gdb.lookup_type 使用 boost::multi_index_container 返回无效类型

我在 RHEL 6 上使用 gdb-7.5,用 gcc-4.7.2 编译。我正在尝试编写一个漂亮的打印机,但boost::multi_index遇到了gdb.lookup_type.

下面给定的代码具有以下声明。

现在,在 gdb 命令提示符下,我正在执行以下操作(在 python 中)

我得到了正确的 node_type 。但是 gdb 无法获取 'base' 和 'allocator' 的类型。

基数错误

以及“分配器”的类似错误。
由于boost::multi_index_container派生自 boost::detail::multi_index_base_type,我期望 gdb 会返回相同的有效类型。

我在这里错过了什么吗。?
我在 gdb 邮件列表中发布了相同的问题,但没有答案。

编码:

苏里亚