问题标签 [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.
c++ - 提升进程间 unordered_map 编译
我正在使用boost 1.53
和GCC 4.1.2
。我尝试unordered_map
在一些测试中使用 boost(文档说它应该与共享内存一起使用),但我无法编译我的代码。用interprocess::map
而不是无序的一切都很好。
类型定义:
分配:
用法:
这是一些错误输出:
我不确定问题出在我的代码中,还是因为旧的编译器版本。如果问题出在编译器上,那么可以用更新版本的 boost 来修复它吗?(我无法更新我的 GCC)。或者也许有一些哈希表的实现,它们与共享内存和我的编译器兼容?
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"
c++ - std::map 和 boost::unordered_map 之间的内务管理和额外内存的大小差异是多少?
我主要是问这个问题,因为我不确定如何计算两者之间的大小差异,因为我存储指向基于 std::string 存储的类对象的指针作为键。我知道额外的空间主要是因为 boost::unordered_map 中的内部维护(听说维护了一个长数组,我不知道为什么,有人可以解释一下为什么还要维护)。我在想 std::map 不需要管家(如果我错了,请纠正我)。
我的想法是 std::map 存储为二叉树或红黑树, boost::unordered_map 将您的键转换为十进制数字并基于此进行散列。
请澄清我对两者的理解。
TIA-R
c++ - 查找大 boost::unordered_map 的大小
我想找到我拥有的 boost::unordered_map 的大小,它包含一个指向由 std::string 映射的类的指针。我正在做一个 sizeof(unordered_map var)。那正确吗?它会给我它占据的空间吗?包括它占用的房子?想要测量它以将其与保存相同数据的 std::map 进行比较,我也将通过 sizeof(std::map var) 进行测量。我想知道两者以确定每个占用多少存储空间,以及比较速度和空间,哪个是更好的选择。
请让我知道我计算尺码的方法是否正确,并将给我实际/正确的尺码,并帮助我做出正确的决定。
编辑1:
如果我尝试获取尺码的方法有误,请告诉我获取正确尺码的方法(包括看家)
TIA
-R
c++ - 构造 unordered_map 时需要定义桶数吗?
在 的构造函数中unordered_map
,我们可以定义分配的桶数。我原以为我可以用它来减少重新散列的时间。但是,在某些情况下,这也可能会损害性能。重新哈希发生在插入时
仅当新的元素数大于 时才会发生重新散列
max_load_factor()*bucket_count()
。如果插入成功,则在节点句柄中保存的元素的指针和引用无效,并且在提取之前获得的对该元素的指针和引用变为有效。(C++17 起)
上面的文档来自std::unordered_map
. 我猜boost是相似的?但是它的文档没有说明重新散列的条件。
如果我将存储桶计数初始化为 100,并且有一个包含所有 100 个元素的存储桶,那么在插入 101 元素之前不会发生重新散列......如果我使用默认存储桶计数,我假设它是 << 100,重新散列可以更早地发生。
如果是这样,我们什么时候要初始化桶计数?
c++ - 使用共享变量进行线程化
我尝试使用多个线程插入到boost::bimap
. 我在线程之间有一些共享变量,我需要通过引用传递,其中一些被每个线程执行修改。但是,我收到错误:
分段错误(核心转储)
我有以下代码。我试图通过使用来避免对变量的并发访问std::lock_guard<std::mutex> lock(mtx)
,但无法使其工作。
并行索引.cpp
并行索引.h
- - - - - - - - - - - - - - - -编辑 - - - - - - - - - ---------------
我试图将字符串内容划分为等于线程数的分区,以使每个线程的部分在本地可用。但似乎没有任何效果。有时它会完成第一个线程并在之后用Segmentation fault (core dumped)
.
并行索引.cpp
并行索引.h
c++ - 使用 TBB 插入无序提升 bimap
我对TBB
. 我正在尝试将<key, value>
pair 插入无序 bimap 中,其中key
is 是 typeuint64_t
并且value
是 type string
。我尝试创建文件中的loop object
,TBB.h
看起来像
在main
函数中TBB.cpp
,我试图调用函数
它从 0 开始并经过 n。我试图增加i
5(首先++i
和i +=kmer_len-1
,就像i = 0, 5, 10, 15, ...
直到 n),但i
只增加 1。
完整代码如下所示:
待定文件
待定.h
问题是i
增加 1,但我尝试将其增加 5,如上所述。
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 类的元素。