这话同样适用于理解 set 容器在复杂数据结构和算法中的应用。 1.1 基本概念 set 容器,作为 STL 的一部分,专为存储唯一元素而设计,自动为元素排序。这一特性使得 set 成为管理有序唯一数据集合的首选。使用 set 不仅可以提高数据处理的效率,还能在底层自动维护数据的完整性和顺序。如同哲学家 Aristotle 所言,“秩序...
这一特性使得set成为管理有序唯一数据集合的首选。使用set不仅可以提高数据处理的效率,还能在底层自动维护数据的完整性和顺序。如同哲学家 Aristotle 所言,“秩序在于细节之中。”,set通过其内部的红黑树实现,体现了这一哲学思想,使得每次数据的插入和删除都维护了一个有序的结构。
底层数据结构不同: std::set使用红黑树实现,元素按照大小顺序存储。 std::unordered_set使用哈希表实现,元素按照哈希值存储。 元素查找方式不同: std::set中的元素是有序的,查找一个元素的时间复杂度为O(log n)。 std::unordered_set中的元素是无序的,查找一个元素的时间复杂度为O(1)。 内存占用不同: ...
概念:std::set 是一个关联容器,它使用红黑树作为底层数据结构来存储元素。它的特点是元素的值是唯一的,并且在插入时会自动按照指定的比较器进行排序。 分类:std::set 属于 C++ 标准库中的关联容器,与之类似的还有 std::map、std::multiset 和 std::multimap。 优势: 唯一性:std::set 中的元素值是唯一的,...
std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定了操作的复杂度(代价/cost)。例如 set::insert(iterator first, iterator last) 在通常情况下是 O(N log N),N 是区间的长度;但是如果...
std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定了操作的复杂度(代价/cost)。例如 set::insert(iterator first, iterator last) 在通常情况下是 O(NlogN),N是区间的长度;但是如果 [fi...
面试官:知道他们底层使用什么数据结构存储数据的吗? 二师兄:两者都是使用红黑树作为底层的数据结构。红黑树是一种自动平衡的二叉树,它确保插入、删除和查找操作的时间复杂度都是O(log n)。 面试官:set/map对于key的类型有什么要求吗? 二师兄:因为set/map被称为有序容器,所以对插入进去的key有排序的要求。一般需...
std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定了操作的复杂度(代价/cost)。例如 set::insert(iterator first, iterator last) 在通常情况下是 O(NlogN),N是区间的长度;但是如果 [fi...
面试官:用过std::set/std::map吗? 二师兄:用过。 面试官:能介绍一下二者吗? 二师兄:std::set是一个有序集合,元素不重复,一般用于去重和排序。std::map是有序组合,包含键值对,键唯一,值可重复。面试官:知道底层数据结构吗? 二师兄:std::set/map底层使用红黑树存储,确保插入、删除...
std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定了操作的复杂度(代价/cost)。例如 set::insert(iterator first, iterator last) 在通常情况下是 O(NlogN),N是区间的长度;但是如果 [fi...