问题标签 [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++ - C++ 关于 boost::unordered_map 和 boost::hash 的一些问题
我最近才开始研究 boost 和它的容器,我在网上和 stackoverflow 上阅读了几篇文章,认为 boost::unordered_map 是大型集合中性能最快的容器。所以,我有这个类状态,它在容器中必须是唯一的(没有重复),容器中将有数百万甚至数十亿的状态。因此,我一直在尝试将其优化为小尺寸和尽可能少的计算。我之前使用过 boost::ptr_vector,但正如我在 stackoverflow 上所读到的,只要其中没有那么多对象,向量才是好的。在我的例子中,状态描述了来自机器人的感觉运动信息,因此可能存在大量状态,因此快速查找是重中之重。遵循boost 文档对于 unordered_map,我意识到我可以做两件事来加快速度:使用 hash_function,并使用相等运算符根据它们的 hash_function 比较状态。因此,我实现了一个私有 hash() 函数,它接收状态信息并使用 boost::hash_combine 创建一个 std::size_t 哈希值。operator== 基本上比较状态的哈希值。所以:
std::size_t 是否足以涵盖数十亿可能的 hash_function 组合?为了避免重复状态,我打算使用它们的 hash_values。
创建 state_map 时,我应该使用 State* 还是哈希值作为键?即:
boost::unordered_map<State*,std::size_t> state_map;
或boost::unordered_map<std::size_t,State*> state_map;
boost::unordered_map::iterator = state_map.find() 的查找时间是否比通过 boost::ptr_vector 并比较每个迭代器的键值更快?
最后,任何关于如何优化这种无序地图以实现速度和快速查找的提示或技巧将不胜感激。
编辑:我已经看到了很多答案,一个是不使用 boost 但 C++0X,另一个不使用 unordered_set,但老实说,我仍然想看看 boost::unordered_set 如何与散列函数一起使用. 我遵循了boost的文档并实现了,但我仍然无法弄清楚如何将boost的散列函数与有序集一起使用。
c++ - 使用 boost 序列化的问题
您能帮我解决以下问题吗?我已经尝试了3天没有成功。
问题出在我的序列化代码上。每当我尝试实例化序列化时,都会遇到此错误。
下面是我写的代码
c++ - boost::unordered_map 缺少 Reserve() 像 std::unordered_map
对于我的下一个任务,我需要使用一个非常大的哈希;因为我有一个旧编译器,所以我不能使用 C++0x std::unordered_map
。理想情况下,我需要打电话reserve
提前为大量物品腾出空间。我在中找不到这种方法boost::unordered_map
:是否有任何实现相同的地方或功能?
2个关联容器是一样的;我可以看到rehash
用于控制存储桶数量的函数和相同的构造函数,但不是关于多个元素的函数。
你能帮我解决这个问题吗?
c++ - std::string 和 std::list 的 boost::unordered_map 中的线程安全,同时对列表进行更改
我boost::unordered_map<const std::string, std::list<TypeA> >
在性能关键的多线程环境中使用。我知道写入 STL 容器不是线程安全的,对于boost::unordered_map
.
现在,如果我想将 A 类型的元素添加或删除到列表中,是否有必要锁定整个映射,而不是锁定正在修改的列表,以便其他线程可以读/写其余的键值对?
如果列表被另一个 STL 容器替换怎么办?
谢谢。
c++ - Boost 无序容器的 `std::bitset` 或 `boost::dynamic_bitset<>` 的高效散列
我想知道是否有一些有效的方法来散列std::bitset
或boost::dynamic_bitset<>
Boost 的无序容器?
我目前在对它们进行散列之前先转换std::bitset
或boost::dynamic_bitset<>
转换std::string
,但这似乎会很慢。
有没有更好的办法?
c++ - 只要集合不变,迭代器是否以相同的顺序迭代 boost::unordered_set 或 boost::unordered_map?
只要集合或映射未更改,迭代器是否会迭代boost::unordered_set
或以相同的顺序迭代?boost::unordered_map
c++ - C++:在尝试迭代 boost::unordered_map 时与 operator< 不匹配
我有以下代码:
当我尝试编译时出现以下错误但不知道为什么?
boost - 提升 multi_index hashed_unique 与 unordered_map 查找性能
boost::unordered_map
's 和 boost::multi_index
容器(具有散列唯一索引)的查找性能是否相同。我想在boost::multi_index
容器中您必须进行两次查找:首先,在表示散列索引的表中(并包含指向与该键关联的实际值的指针)和第二次查找,因为您需要遵循该指针才能达到您的价值。似乎该boost::unordered_map
实现可能会避免第二次查找(因此会更快)。
c++ - 使用 std::string 键从 boost::unordered::unordered_map 恢复值时出错
我将我从正则表达式匹配中获得的结果存储在 unordered_map 中。std::cout 子匹配 m[1].str() 和 m[2].str() 正确显示对键值。
尽管当我将它们存储在 unordered_map 中时,我总是会收到一个异常报告,报告找不到密钥。这是代码:
DEPOT_PATH 是配置文件中“变量”的名称。std::cout << m[1].str() 完美显示它,但在 unordered_map 中找不到。有任何想法吗?
c++ - 插入以提升无序地图
嗨,我正在尝试将记录插入 boost::unordered_map
地图定义为
其中 Input 是类
我使用一个函数来插入记录,如下所示
我阅读了 boost 文档,它说有一个insert()
向容器插入数据的函数,但是当我编译它时显示错误。