std :: unordered_set :: find和std :: find之间奇怪的性能差异

伊戈尔

我尝试比较std :: unordered_set :: find和std :: find的性能。与我的期望和规则相反,https: //clang.llvm.org/extra/clang-tidy/checks/performance-inefficient-algorithm.html std :: find明显更快

带有unorderred_set的快速测试台

快速工作台屏幕

unorder_set包含整数,因此散列不成问题。std :: set :: find的行为符合预期,并且比std :: find更快。

速成套装有谁能解释这个行为?谢谢

Pablochaches

问题是您选择的集合太小。

这是一个具有1000个元素的示例

#include <unordered_set>
#include <set>

const static std::unordered_set<int> mySet {
0,
1,
2,
...
998,
999
};

static void UsingSetFind(benchmark::State& state) {
  // Code inside this loop is measured repeatedly
  for (auto _ : state) {
    auto it = mySet.find(435);
    benchmark::DoNotOptimize(it);
  }
}
// Register the function as a benchmark
BENCHMARK(UsingSetFind);

static void UsingStdFind(benchmark::State& state) {
  // Code before the loop is not measured
  for (auto _ : state) {
    auto it = std::find(mySet.begin(), mySet.end(), 345);
    benchmark::DoNotOptimize(it);
  }
}
BENCHMARK(UsingStdFind);

区别是惊人的

mySet.find(435)

可以像搜索哈希表一样快速搜索它。

std::find(mySet.begin(), mySet.end(), 345);

将乘以1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: count和std :: find之间的性能差异

来自分类Dev

检查std :: unordered_set :: find结果的代码将无法编译

来自分类Dev

了解`std :: unordered_set`的用法

来自分类Dev

std :: unordered_set插入获取对象

来自分类Dev

何时使用std :: unordered_set代替std :: set?

来自分类Dev

何时使用std :: unordered_set代替std :: set?

来自分类Dev

GCC 4.9的unordered_set和std :: move

来自分类Dev

使用std :: unique_ptr的std :: unordered_set

来自分类Dev

std :: unordered_set是否允许插入重复的元素?

来自分类Dev

如何在C ++中使用std :: unordered_set?

来自分类Dev

std :: unordered_set ::擦除复杂度

来自分类Dev

指向std :: unordered_set中元素的指针/引用

来自分类Dev

std :: unordered_set中的KeyEqual是做什么用的?

来自分类Dev

您如何static_cast std :: unordered_set?

来自分类Dev

std :: unordered_set通过引用与值的返回类型

来自分类Dev

我应该对一组指针使用std :: set还是std :: unordered_set吗?

来自分类Dev

C ++:为什么unordered_set :: find比find更快?

来自分类Dev

扩展std :: unordered_set <>以与std :: stack <>一起使用

来自分类Dev

从std :: unordered_set <char>有效构造std :: string

来自分类Dev

在std :: unordered_set <std :: unique_ptr>(C ++ 20)中找到指针T *

来自分类Dev

unordered_set :: find的复杂性是否可以预测?

来自分类Dev

clear()是否会影响std :: unordered_set的存储区计数?

来自分类Dev

函数结束时是否会删除std :: unordered_set中的数据?

来自分类Dev

是否可以保证对std :: unordered_set元素的迭代顺序始终相同?

来自分类Dev

std :: tuple的自定义哈希不适用于unordered_set

来自分类Dev

如何为std :: unordered_set定义自定义键等效谓词?

来自分类Dev

是否可以通过存储桶迭代器从std :: unordered_set中删除元素?

来自分类Dev

具有自定义谓词的std :: unordered_set中的未定义行为

来自分类Dev

C++11 - 将变量放置到任何 std 容器(向量、列表、集合、unordered_set)

Related 相关文章

  1. 1

    std :: count和std :: find之间的性能差异

  2. 2

    检查std :: unordered_set :: find结果的代码将无法编译

  3. 3

    了解`std :: unordered_set`的用法

  4. 4

    std :: unordered_set插入获取对象

  5. 5

    何时使用std :: unordered_set代替std :: set?

  6. 6

    何时使用std :: unordered_set代替std :: set?

  7. 7

    GCC 4.9的unordered_set和std :: move

  8. 8

    使用std :: unique_ptr的std :: unordered_set

  9. 9

    std :: unordered_set是否允许插入重复的元素?

  10. 10

    如何在C ++中使用std :: unordered_set?

  11. 11

    std :: unordered_set ::擦除复杂度

  12. 12

    指向std :: unordered_set中元素的指针/引用

  13. 13

    std :: unordered_set中的KeyEqual是做什么用的?

  14. 14

    您如何static_cast std :: unordered_set?

  15. 15

    std :: unordered_set通过引用与值的返回类型

  16. 16

    我应该对一组指针使用std :: set还是std :: unordered_set吗?

  17. 17

    C ++:为什么unordered_set :: find比find更快?

  18. 18

    扩展std :: unordered_set <>以与std :: stack <>一起使用

  19. 19

    从std :: unordered_set <char>有效构造std :: string

  20. 20

    在std :: unordered_set <std :: unique_ptr>(C ++ 20)中找到指针T *

  21. 21

    unordered_set :: find的复杂性是否可以预测?

  22. 22

    clear()是否会影响std :: unordered_set的存储区计数?

  23. 23

    函数结束时是否会删除std :: unordered_set中的数据?

  24. 24

    是否可以保证对std :: unordered_set元素的迭代顺序始终相同?

  25. 25

    std :: tuple的自定义哈希不适用于unordered_set

  26. 26

    如何为std :: unordered_set定义自定义键等效谓词?

  27. 27

    是否可以通过存储桶迭代器从std :: unordered_set中删除元素?

  28. 28

    具有自定义谓词的std :: unordered_set中的未定义行为

  29. 29

    C++11 - 将变量放置到任何 std 容器(向量、列表、集合、unordered_set)

热门标签

归档