相当于旧版C++的 C++11 unordered_map
Equivalent of C++11 unordered_map for an older version of C++
std::unorderd_map
¹ 是多少?我已经尝试过std::tr1::unordered_map
,不幸的是我的编译器不支持它。¹ 我真的需要unordered_map
的好处,即平均 O(1( 时间访问。
² 我正在打印__cplusplus
,上面写着1
.我不确定编译器符合哪个C++标准。
如果您的编译器在编译代码时确实为您提供了1
值__cplusplus
C++则它是不符合 (a( 的。
在为 C++11 之前的编译器获取无序映射实现方面,您可能需要研究 Boost - 标准C++中的很大一部分首先出现在那里:-(无序映射早在 2008 年的 Boost 1.36 中就可用,因此对于至少符合 C++03 标准的编译器来说应该没问题。
此外,尽管 Boost 的某些部分需要构建到库中,但无序地图不是这些部分之一。作为仅标头功能,您只需在代码中包含标头文件并使用它。例如,下面的程序打印Hello, world.
完全没有包含额外的库(我使用了非常基本的g++ -o testprog testprog.cpp
来编译它(:
#include <iostream>
#include <boost/unordered_map.hpp>
int main() {
boost::unordered_map<std::string, std::string> x;
x["hi"] = "Hello";
x["planet"] = "world";
std::cout << x["hi"] << ", " << x["planet"] << ".n";
}
如果由于某种原因,Boost不适合,那么标准无序映射的属性基本上是所有内容的平均恒定时间复杂度,因此几乎任何半体面的哈希表实现也应该是可行的。但是,只有当您无法使 Boost 工作时,我才会走这条路 - 我更喜欢它仅基于其已知的代码质量。
(a( 标准的每次迭代(至少从C++98开始(都应有一个非常具体的值集,例如根据C++11标准:
名称
__cplusplus
定义为编译C++翻译单元时201103L
的值。
每次迭代的值应为:
pre-C++11 199711L
C++11 201103L
C++14 201402L
C++17 201703L
它可能不符合的最可能原因是您使用的是 4.7 之前的 g++
变体 - 有一个十年前的错误,它报告__cplusplus
版本是1
而不是"正确"值。您似乎正在使用旧的/奇怪的/不符合标准的编译器和/或标准库。__cplusplus
宏应定义为表示YYYYMM
日期的整数,该日期指示支持的C++标准。
除了使用现代编译器和标准库之外,您还有一些 C++11 std::unordered_map
(如哈希映射实现(的替代方案:
-
std::tr1::unordered_map
:C++11 版本的前身,如果您的 std lib 支持它。 - Boost.Unordered 提供了只需要 C++98 编译器的
boost::unordered_map
,并尽可能模仿现代std::unordered_map
的接口。
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶