529得票15回答
在关键字较为简单的情况下,使用map与unordered_map相比有什么优势吗?

最近听了有关C++中的unordered_map的讲座后,我意识到大多数情况下应该使用unordered_map而不是map,因为它具有更高效的查找能力(平均O(1)与O(log n)相比)。我使用map的大部分时候,都会使用int或std::string作为键类型;因此,对于哈希函数的定义,...

13得票1回答
遍历C++无序映射的时间复杂度

我知道C++ STL中的unordered_map是由哈希表实现的,包含对应于哈希值的桶(bucket)。插入、删除和元素查找的时间保证为平均常数时间(amortized constant)。然而,我不太理解迭代器在这个数据结构上的工作原理。当我递增迭代器时,它如何知道下一个位置在哪里?使用迭...

8得票4回答
不重复键数据的`std::unordered_map`

我有一个名为 Person 的类,其中包含一个 name 属性(std::string类型)。 我想要创建一个查找表,即 std::unordered_map,以便通过名字查找 Person。然而,如果已经有一个 Person 对象,我也想要能够获取他们的名字。 这需要将 name 存储两...

112得票5回答
如何在map和unordered_map之间选择?

假设我想用字符串作为键来映射数据。应该选择哪个容器,map 还是 unordered_map?假设内存不是问题,关注的是速度,unordered_map 通常会给出平均复杂度 O(1),最坏情况下为 O(n)。 什么情况下会达到 O(n)?在什么情况下 map 比 unordered_map ...

17得票3回答
C++无序映射冲突处理、调整大小和重新哈希

虽然我没有阅读 C++ 标准,但我认为 C++ 的 unordered_map 应该是这样工作的: 在堆中分配一块内存。 每次 put 请求时,对对象进行哈希并将其映射到此内存的某个空间。 在此过程中,通过链接或开放地址法处理冲突。 我很惊讶我没有找到太多关于 unordered_ma...

15得票4回答
遍历C++无序映射表

我写了一个程序,它会读取输入直到你遇到逗号“,”为止。然后它会计算你输入的字母数量。 我想要遍历这个映射表,但它显示it没有定义类型:#include <iostream> #include <conio.h> #include <ctype.h> #in...

410得票8回答
C++使用自定义类类型作为键的unordered_map

我正在尝试将自定义类用作unordered_map的键,如下所示:#include <iostream> #include <algorithm> #include <unordered_map> using namespace std; class n...

8得票2回答
使用类似于std::owner_less的哈希算法的C++11无序集合

我正在使用外部网络库,该库返回代表打开套接字的一些神奇结构,并且文档说明在将它们插入STL容器时,应使用std::owner_less进行比较。 std::map<MagicStructure, std::shared_ptr<Client>, std::owner_les...

25得票1回答
在C++ STL中,将指针作为unordered_map的键进行哈希处理。

我发表了一个类似的问题,涉及在C++ STL中将指针用作映射的键。当将指针用作键时,unordered_map中的哈希是如何进行的。更具体地说,如果我定义: std::unordered_map< CustomClass*, int > foo; 默认的C++ std::ha...

7得票1回答
为什么C++11/Boost的`unordered_map`在删除元素时不会重新哈希?

我想知道为什么C++11和Boost的哈希表在迭代删除元素时不会进行调整大小。即使这不是技术上的内存泄漏,我认为它可能是应用程序中的严重问题(对我来说是一个隐藏的问题,很难追踪回去),并且实际上可能影响许多应用程序。这是容器的“设计缺陷”吗? 我进行了基准测试,似乎影响了几个编译器版本(包括...