C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器upper_bound(x)) 改 一旦插入就无法修改,只能先删再增 查 a.find(x) != a.end() 或者 a.count(x) set 系列成员函数总结 函数 含义 set multiset unordered_set insert(x) 插入一个元素 x √ √ √ erase(x) 删除所有等于 x 的元素 √ √ √ count(x) 有多少个等于 x 的元素 √ , 0 或 1 √ √ , C++11 新增: unordered_set 容器 • set 会让元素从小到大排序 。 • 而 unordered_set 不会排序 ,里面的元素都是完全随机 的顺序,和插入的顺序也不 一样。虽然你可能注意到这 里的刚好和插入的顺序相反 ?巧合而已,具体怎么顺序 是和 glibc 实现有关的。 • set 基于红黑树实现,相当 于二分查找 树, unordered_set 基于散 列哈希表实现,正是哈希函 有序 查找 插入 vector × × O(n) O(1) ~ O(n) set √ √ O(logn) O(logn) multiset × √ O(logn) O(logn) unordered_set √ × O(1) O(1) unordered_multiset × × O(1) O(1) 不同版本的 set 容器比较 类型 头文件 lower/upper_bound equal_range0 码力 | 83 页 | 10.23 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器(BV1m34y157wb) ,我们已经讲了 set 容器,特点是自动去重 + 高效查找。 • set 容器中的类型通过模板来指定: set• set 容器又可以分为 set 、 multiset 、 unordered_set 、 unordered_multiset 四类。 • set 容器和 map 的相似之处在于他的底层实现都是二叉排序树,现在让我们来鞋习一下他吧 。 vector 查找为什么低效 k k k k k k k k k v v v v v v set map 第四章:哈希散列表 高效的查找离不开我 高效的查找离不开我 unordered_set 查找为什么高效 • 为什么哈希散列表 unorered_set 会比线性数组 vector 在查找这一点上更高效? • 你看,我们刚才只判断了 3 次就找到了目标。这还是最坏的情况,最好只需要 次大小判断,就能找到任 意一个数!因为算法复杂度可以忽略 +1 -1 这些小东西,所以 set 查找的最坏复杂度是 O(1) ! 4 要找的数 从 unordered_set 到 unordered_map :无非是外挂了个值类型 • 刚刚说明了 unordered_set 是如何在 O(1) 复杂度内找到任意元素的。 • unordered_map 也一样,只不过是在每个 K 后面外挂了一个 0 码力 | 90 页 | 8.76 MB | 1 年前3
共 2 条
- 1













