c++STL -set容器初步理解
大家好,我是小学五年级在读的蒟蒻,专注于后端,一起见证蒟蒻的成长,您的评论与赞与关注是我的最大动力,如有错误还请不吝赐教,万分感谢。一起支持原创吧!纯手打有笔误还望谅解。
今天在写leetcode题时遇到查询两个字符串相交的部分,看了别人的题解发现用set容器可以很方便的完成这题,然而我并没有了解过容器这块,所以写下这篇博文记录一下
-
什么是容器
- 容器是用来存放数据的,其数据可以是用户自定义类型也可以是预定义的类型。这些容器都是已经封装好的了,在用户不知道存放的数据数量时可以使用容器存放避免内存浪费
-
什么是set容器
-
set容器,c++提供了三种可用的数据结构
红黑树是一种平衡二叉搜索树,key值是有序的不可修改,否则会整棵树错乱,只能增加或删除元素
-
std::set
-
set底层实现是红黑树,其中的元素既是键值又是实值,其排列组合是有序的且数值不可重复,添加多个相同元素i其set里面还是只有一个元素i,修改元素只能通过删除元素重新添加元素,数值不可修改
-
构建set容器的方法
-
使用默认构造函数创建空的容器,也可使用参数对其进行初始化
-
使用拷贝构造函数,在创建新容器时将已有容器的元素全部复制到新容器中
-
常用方法
-
begin() 返回set容器的第一个元素
-
end() 返回set容器的最后一个元素
-
find(val) 查找set容器中是否有无val元素,找到就返回元素,否则就返回当前set容器的最后一个元素
-
size() 返回当前元素中的元素个数
-
insert() 向set容器中插入元素
-
empty() 判断set容器是否为空
-
clear() 删除set容器中的所有元素
部分代码演示
#include <iostream> #include <set> using namespace std; int main() { set<int> s; cout << "set容器是否为空" << s.empty() << endl; cout << "添加元素" << endl; s.insert(1); s.insert(2); s.insert(3); cout << "第一个元素是" << *s.begin() << endl; cout << "最后一个元素是" << *s.end() << endl; cout << "当前容器元素有" << s.size() << endl; cout << "查找元素" << endl; cout << *s.find(4) << endl; }
-
-
-
-
-
std::multiset
- multiset底层实现也是红黑树,其排列组合是有序的数值可重复,数值不可修改
-
std::unordered_set
- unordered_set底层实现是哈希表,其排列组合是无序的且数值不可以重复,数值不可修改
-
-