问题标签 [boost-unordered]

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 回答
1999 浏览

c++ - 提升进程间 unordered_map 编译

我正在使用boost 1.53GCC 4.1.2。我尝试unordered_map在一些测试中使用 boost(文档说它应该与共享内存一起使用),但我无法编译我的代码。用interprocess::map而不是无序的一切都很好。

类型定义:

分配:

用法:

这是一些错误输出:

我不确定问题出在我的代码中,还是因为旧的编译器版本。如果问题出在编译器上,那么可以用更新版本的 boost 来修复它吗?(我无法更新我的 GCC)。或者也许有一些哈希表的实现,它们与共享内存和我的编译器兼容?

0 投票
1 回答
97 浏览

c++ - boost::unordered_set 的 char16_t 字符串

为什么会关注

工作和跟随导致太多的编译错误。

另外,这有什么解决方案?我是否需要像这里提到的那样编写自己hash_function的函数对象?operator==

0 投票
1 回答
851 浏览

c++ - 在共享内存中分配的映射的映射

在 a 内部boost::interprocess::managed_shared_memory,我试图boost::unordered_map在另一个内部创建一个boost::unordered_map值,std::string两个地图都有键。共享内存段内的 Map in Map 被两个不同的进程访问,从外部和内部映射中获取值。

下面是我的实现 & 想知道这是否可能/正确的方式或任何其他更好的方式?

其他详情:

CentOS 7 上的 gcc 版本 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC),BOOST_LIB_VERSION "1_58"

0 投票
0 回答
40 浏览

c++ - std::map 和 boost::unordered_map 之间的内务管理和额外内存的大小差异是多少?

我主要是问这个问题,因为我不确定如何计算两者之间的大小差异,因为我存储指向基于 std::string 存储的类对象的指针作为键。我知道额外的空间主要是因为 boost::unordered_map 中的内部维护(听说维护了一个长数组,我不知道为什么,有人可以解释一下为什么还要维护)。我在想 std::map 不需要管家(如果我错了,请纠正我)。

我的想法是 std::map 存储为二叉树或红黑树, boost::unordered_map 将您的键转换为十进制数字并基于此进行散列。

请澄清我对两者的理解。

TIA-R

0 投票
2 回答
168 浏览

c++ - 查找大 boost::unordered_map 的大小

我想找到我拥有的 boost::unordered_map 的大小,它包含一个指向由 std::string 映射的类的指针。我正在做一个 sizeof(unordered_map var)。那正确吗?它会给我它占据的空间吗?包括它占用的房子?想要测量它以将其与保存相同数据的 std::map 进行比较,我也将通过 sizeof(std::map var) 进行测量。我想知道两者以确定每个占用多少存储空间,以及比较速度和空间,哪个是更好的选择。

请让我知道我计算尺码的方法是否正确,并将给我实际/正确的尺码,并帮助我做出正确的决定。

编辑1:

如果我尝试获取尺码的方法有误,请告诉我获取正确尺码的方法(包括看家)

TIA

-R

0 投票
2 回答
554 浏览

c++ - 构造 unordered_map 时需要定义桶数吗?

在 的构造函数中unordered_map,我们可以定义分配的桶数。我原以为我可以用它来减少重新散列的时间。但是,在某些情况下,这也可能会损害性能。重新哈希发生在插入时

仅当新的元素数大于 时才会发生重新散列 max_load_factor()*bucket_count()。如果插入成功,则在节点句柄中保存的元素的指针和引用无效,并且在提取之前获得的对该元素的指针和引用变为有效。(C++17 起)

上面的文档来自std::unordered_map. 我猜boost是相似的?但是它的文档没有说明重新散列的条件。

如果我将存储桶计数初始化为 100,并且有一个包含所有 100 个元素的存储桶,那么在插入 101 元素之前不会发生重新散列......如果我使用默认存储桶计数,我假设它是 << 100,重新散列可以更早地发生。

如果是这样,我们什么时候要初始化桶计数?

0 投票
1 回答
85 浏览

c++ - 线程插入到 bimap

我想使用多个线程插入到bimap. 我尝试了以下代码:

并行索引.cpp

并行索引.h

我使用 Eclipse IDE 编译代码,但出现错误

我看了一下here,但无法摆脱错误。

0 投票
3 回答
295 浏览

c++ - 使用共享变量进行线程化

我尝试使用多个线程插入到boost::bimap. 我在线程之间有一些共享变量,我需要通过引用传递,其中一些被每个线程执行修改。但是,我收到错误:

分段错误(核心转储)

我有以下代码。我试图通过使用来避免对变量的并发访问std::lock_guard<std::mutex> lock(mtx),但无法使其工作。

并行索引.cpp

并行索引.h

- - - - - - - - - - - - - - - -编辑 - - - - - - - - - ---------------

我试图将字符串内容划分为等于线程数的分区,以使每个线程的部分在本地可用。但似乎没有任何效果。有时它会完成第一个线程并在之后用Segmentation fault (core dumped).

并行索引.cpp

并行索引.h

0 投票
1 回答
106 浏览

c++ - 使用 TBB 插入无序提升 bimap

我对TBB. 我正在尝试将<key, value>pair 插入无序 bimap 中,其中keyis 是 typeuint64_t并且value是 type string。我尝试创建文件中的loop objectTBB.h看起来像

main函数中TBB.cpp,我试图调用函数

它从 0 开始并经过 n。我试图增加i5(首先++ii +=kmer_len-1,就像i = 0, 5, 10, 15, ...直到 n),但i只增加 1。

完整代码如下所示:

待定文件

待定.h

问题是i增加 1,但我尝试将其增加 5,如上所述。

0 投票
1 回答
63 浏览

c++ - 快速填充 boost::unordered_set

我正在尝试根据图像分类的结果尽可能快地构建一组元素。

在细节上,我想在这个集合中存储属于某个类的所有 (r, g, b) 像素。该问题有 2 个类别,我想保留第 1 类的像素并丢弃第 0 类的像素。分类是使用经过训练的mlpack分类器在双精度 (r, g, b) 向量上完成的。

我必须使用 aboost::unordered_set<uint32_t>来完成此任务或类似任务。到目前为止的代码看起来像这样

我做了一些基准测试,最慢的部分是插入insert(). 扫描所有可能的 (r, g, b) 大约需要 5 秒。由于代码是从 GUI 调用的,因此我希望它能够更快地减少用户等待结果的时间。

首先我试图改变.insert().emplace()但正如我所料,几乎没有改善。

我还尝试填充另一个容器,实际上std::vector速度非常快,并且使用迭代器将其内容复制到集合中:

但是,最后一行仍然需要很多时间,大约 2-3 秒。你对我有什么暗示吗?我可以做些什么来提高我的代码速度?是否有更快的容器可以用来替换boost::unordered_set?容器应仅包含来自第 1 类的元素。