相关疑难解决方法(0)

在普通键的情况下使用map over unordered_map有什么好处吗?

最近unordered_map在C++中的讨论使我意识到,我应该使用之前使用unordered_map过的大多数情况map,因为查找的效率(摊销的O(1)O(log n)).大多数时候我使用的地图我使用intstd::string作为键,因此我对哈希函数的定义没有任何问题.我越是想到它,我就越发现我发现std::map在一个简单类型的情况下我找不到任何理由std::unordered_map- 我看了一下界面,并没有发现任何显着的差异会影响我的代码.

因此,这个问题-有没有使用任何真正的原因std::mapstd::unordered map简单类型一样的情况下,intstd::string

我从一个严格的编程角度问我 - 我知道它没有被完全认为是标准的,并且它可能会带来移植问题.

另外我希望正确的答案之一可能是"它对于较小的数据集更有效",因为开销较小(是真的吗?) - 因此我想将问题限制在密钥数量的情况下是非平凡的(> 1 024).

编辑: 呃,我忘记了显而易见的(感谢GMan!) - 是的,地图是当然有序的 - 我知道,我正在寻找其他原因.

c++ performance dictionary unordered-map

346
推荐指数
12
解决办法
18万
查看次数

具有32位整数的低冲突率的快速字符串哈希算法

我有许多不相关的命名事物,我想快速搜索."aardvark"在任何地方始终都是"aardvark",因此对字符串进行散列并重用整数可以很好地加速比较.整个名称集是未知的(并随着时间的推移而变化).什么是快速字符串哈希算法,它将生成小(32或16)位值并具有低冲突率?

我想看一个特定于C/C++的优化实现.

c++ string algorithm hash

65
推荐指数
6
解决办法
8万
查看次数

如果提供了正确的迭代器提示,map/set :: insert的复杂性是多少?

O(1)还是O(logN)但系数较小?

如果这是未指定的,我至少想知道基于合理假设的答案,即地图/集是使用红黑或AVL树实现的.我认为,插入元素的一般算法是这样的:

  • 找到合适的地方 - O(logN)
  • 做实际插入 - ?
  • 必要时重新平衡树 - ?

现在,如果我们提供正确的迭代器提示,那么第一步就变成O(1).其他步骤是O(1)还是O(logN)

c++ set binary-search-tree data-structures tree-balancing

5
推荐指数
1
解决办法
477
查看次数