1set容器
用于存储无序、不重复的元素。set中的元素是根据元素值进行排序,并且每个元素在set中都是唯一的。
具体来说,set
容器主要有以下特点:
- 元素不重复:
set
容器中存储的所有元素都是唯一的,如果插入set
中已经存在的元素,则会被忽略。 - 自动排序:
set
容器中的元素默认按照升序进行排序,且不允许修改排序方式。如果需要使用其他排序方式,可以使用自定义的比较函数或者采用multiset
容器。 - 快速查找:在
set
容器中查找指定元素的时间复杂度为 logN(其中 N 表示set
包含的元素个数),比线性查找更加高效。 - 插入和删除操作快速:向
set
容器中插入和删除元素的时间复杂度也为logN.set<int> s; // 向 set 中插入元素 s.insert(4); s.insert(2); s.insert(1); s.insert(3); // 遍历 set 中的元素 for (auto iter = s.begin(); iter != s.end(); iter++) { cout << *iter << " "; } cout << endl; //输出结果 1 2 3 4
2map容器
是一种关联容器,它提供了一种可以快速插入、查找和删除带有关键字的值的数据结构。map基于红黑树实现,具有自动排序以及元素唯一性保证的特点。
1插入元素的三种方式
1)使用inser()函数,返回一个pair对象
map<string,int> person;
person.insert(make_pair("小黑",18));
2)使用emplace()函数,使用元素的值调用构造函数进行插入操作
map<string,int> p;
p.emplace("xiaohei",18);
3)使用下标运算符[]进行插入或修改元素。如果key值不存在,则会创建新的键值对;如果已经存在,则会更新该键的的值。
map<int,int> m;
m[0]=10;
m[1]=100;
++m[1]; //m[1] = 101
++m[101] //key=100原先不存在,默认创建m[101]=0,然后运算++,故m[101] = 101
上述三种方法在元素数量较少的情况下都能保证良好的性能,但当关键字数目极多时,使用insert()要比其他两种方式更高效些。
---------------------------------------------------------更多内容,待更新------------------------------------------------