set 集合
常用方法:
方法 | 功能 |
insert | 插入一个元素 |
erase | 删除一个元素 |
count | 判断元素是否在set中 |
size | 获取元素大小 |
clear | 清空 |
set具有和数学中“集合”类似的属性,set由不重复的数据组成,插入、查找、删除、和查询的时间复杂度都为O(lgn).而数组虽然插入的时间复杂度为O(1),但删除、查询都为O(n),时间效率低。
初始化一个集合
C++中直接构造一个set的语句为:
set<T> s;//定义一个存储T类型、名为s的集合,初始时s为空
插入元素
#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
set<string> fruits;
fruits.insert("apple");
fruits.insert("apple");
fruits.insert("banana");
fruits.insert("mango");
for(set<string>::iterator it = fruits.begin();
it != fruits.end(); it++){
cout << *it << endl;
}
return 0;
}
注意到上边的代码里有两个fruits.insert("apple");那么此时集合里的元素都有什么呢?
C++用insert()方法向集合中插入一个新的元素.如果集合中已经存在了这个元素,再次插入不会产生任何效果,集合中不会出现重复元素
删除元素
#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
set<string> fruits;
fruits.insert("apple");
fruits.insert("banana");
fruits.insert("mango");
fruits.erase("apple");
fruits.erase("banana");
fruits.erase("orange");
for(set<string>::iterator it = fruits.begin();
it != fruits.end(); it++){
cout << *it << endl;
}
return 0;
}
c++中通过erase()方法删除集合中一个元素,如果集合中不存在这个元素,则不进行任何操作
查找元素
#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
set<string> fruits;
fruits.insert("apple");
fruits.insert("banana");
fruits.insert("mango");
if(fruits.count("apple")){
cout << "We have apple!" << endl;
}
return 0;
}
count()方法可以查找一个元素是否在集合中,如果存在返回 1,否则返回 0
遍历元素
#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
set<string> fruits;
fruits.insert("apple");
fruits.insert("banana");
fruits.insert("mango");
for(set<string>::iterator it = fruits.begin();
it != fruits.end(); it++){
cout << *it << endl;
}
return 0;
}
通过迭代器可以访问集合中每一个元素,C++标准库容器都可以使用迭代器,但是其中只有少数几种支持下标运算符,如果你还不太理解迭代器,那就把它想成指针吧
清空
C++中只需要调用clear()方法就可以清空set
fruits.clear();
注意用clear()清空set并不会释放其再计算机中开辟的内存,如果想释放set的内存,把一个空set赋给它就好了