【发布时间】:2019-11-21 16:52:06
【问题描述】:
显然,C++ 标准库的 STL 前身曾经将基于哈希的容器包含在名为 hash_map.h 的头文件中(具体来说,我猜是 hash_map 容器)。但是 - C++ standard library does not have a <hash_map>;和 AFAIK unordered_map 不完全一样。
现在,我正在尝试构建这个旧代码库,我刚刚注意到它包含 <hash_map.h>。
假设我在 AMD64 机器上使用 Devuan Beowulf (~= Debian Buster) Linux,我应该怎么做才能构建代码?
注意事项:
- 我不想复制一个完整的 10 年前的开发环境;这个代码库最终应该可以使用我的(或任何现代的)Linux 发行版构建。
-
我愿意:
- 对代码进行细微更改。
- 安装一些适合分发的软件包。
- 在
/usr/local下安装一些东西
按偏好降序排列。
【问题讨论】:
-
如果您对
hash_map<进行全局搜索并替换为unordered_map,会发生什么情况。同样将#include <hash_map.h>替换为#include <unordered_map>。它不会起作用吗?也许? -
@selbie:由于其他原因,该代码现在无法构建。我想知道您的建议是应该起作用,还是已知通常起作用;如果没有,有什么注意事项。
-
至少有一个网页表明 hash_map 是与线程同步的。假设您不依赖于没有锁的多个线程访问 hash_maps,我认为您会没事的。即使你引入了 hash_map 的替代实现,你仍然需要以类似的方式测试你的代码。
-
你在散列什么?有一流的免费算法,测试得比大多数人预期的要好。标准库通常是懒惰的。散列
int是一种无操作,导致传播不良。有足够熟练的人来正确地做到这一点。灵感:mostlymangling.blogspot.com 您是否需要一些适合旧方案的散列或一个效果很好的替代品?查看博客和对“随机”的引用。即插即用。有趣的是,即使编译需要时间,您实际上也可以constexpr很多情况:) -
如果你需要一个
<hash_map>标头,它的功能可以使其余代码满意,我想我可以提供。只需提供您需要的签名即可。
标签: c++ stl hashmap c++-standard-library