简介:
set是一个去除掉数组中重复元素并进行排序的集合,学过python的同学应该知道python里面的set类,不一样的地方在于C++类库的set会自动将数组进行排序。
如果需要只进行排序当不进行去重,则使用multiset;
如果只去重不排序则使用unorder_set;
类型名 | 作用 | 头文件 |
---|---|---|
set<elemType>name | 去重并且排序 | #include<set> using namespace std; |
multiset<elemType>name; | 只排序不去重 | #include<set> using namespace std; |
unordered_set<elemType> name; | 只去重不排序 | #include<unordered_set> using namesp |
这三种集合在pat中都是支持的。
定义:
如上表
元素访问:
在set中只能通过迭代器来进行访问,因为在插入元素的过程中,set会自动去掉重复的元素,如果按照数组下标来进行访问的话很容易越界。
//name为之前定义的set
for(set<int>::iterator it=name.begin();it!=name.end();it++){
printf("%d\t",*it);
}
数据插入:
只能使用insert来进行插入。
相关函数:
函数 | 作用 | 时间复杂度 |
---|---|---|
insert() | 插入元素 | O(logN) |
find() | 返回元素的指针 | O(logN) |
erase() | 去除元素(一般和find进行配合) | 删除方式不同,时间复杂度不同 |
size() | 返回元素个数 | O(1) |
clear() | 清空set的所有元素 | O(N) |