【发布时间】:2013-05-23 23:06:02
【问题描述】:
假设sizeof(void*) == sizeof(size_t) 并且散列指针只是将其转换为size_t。所以我想知道我的集合是否包含一个元素,哪个会更快std::set<void*> 或std::unordered_set<void*>?
我知道std::set 的工作原理,但我不熟悉std::unordered_set。好吧,我知道无序集使用散列和桶,如果没有发生交集(这是我的情况),复杂性是 O(1)。但我不知道这种恒定的复杂性有多少。
如果容器中有多少日期是相关的,我的实际场景使用不到一百个¹。但我的好奇心涉及元素很少和元素很多的两种情况。
¹ 元素的数量非常少,即使是 std::vector 也能正常运行。
【问题讨论】:
-
哈希表倾向于使用更多内存在更短的时间内执行访问。
-
为什么不直接比较您感兴趣的操作的复杂性并据此决定呢?见
unordered_set、set,也许还有vector。 -
该死,我忘了提出我的问题。我正在做的操作是检查一个元素是否包含在集合中。我刚刚编辑了它。
-
@syam 唯一重要的操作是 count()。它在集合上有复杂度 log(n),在 unordered_set 上有 1。我只是想知道这种恒定的复杂性有多大。让我强调一下,这不是我假装做的微优化,这只是我想知道的事情。
标签: c++ performance c++11