包含头文件#include<set>
set<int>v;
一、pair(对组)的介绍
pair<int, string>p = { 10,"adj" };//可以理解为一个结构体,里面有两数据(自己定义)
里面有什么?
1.p.first=10;
2.p.second=adj;
3.重载=
4.swap函数
二、set容器
set容器与vector等容器不同,它有只有键值,插入数据是按照键值来排序的
注意set数据不会重复,如果插相同的插不了,当然也不会报错
1.插入数据
(1)v.insert(1);//插入1;
(2)v.emplace(1);//插入1
2.删除数据
(1)v.erase(3);//删除3
3.其他操作
(1)v.clear()//删除全部数据
(2)v.size()// 返回容器大小
(3)v.count(val)//返回val数据的数量
(4)v.empty()//返回是否空
(5)v.find(val)//返回第一个val的迭代器,否则返回end()一样的
(6)v.lower_bound(val)//返回第一个比val小的
(7)v.upper_bound(val)
(8)提供一个网站了解详细
C++ STL set容器完全攻略(超级详细) (biancheng.net)
遍历容器
for (set<string>::iterator it = p.begin(); it != p.end(); ++it)
{
cout << *it << " ";//好像全部都这样写啊
}如何自定义set排序?
在定义的时候就写好规则(比如从大到小)
set<string,greater<string>>p;
三、multiset容器
与set几乎没有区别,头文件也是<set>,只是这个允许相同的键值共存
四、map容器
map与set不同的是:map除了键值还有一个数据。
了解详细可以看
C++ STL map容器详解 (biancheng.net)
1.插入数据
(1)v.insert(pair<int,string>(3,"333"));
(2) v.insert(make_pair(3,"333"));
(3).v.insert(map<int,string>::value_type(3,"333"));
(4)v[3]="333";
(5)v.emplace()
第4种最简单,但是可能会出现一点小问题,要用另外3种
2.删除数据
//迭代器刪除 it = maps.find("123"); maps.erase(it); //关键字删除 int n = maps.erase("123"); //如果刪除了返回1,否则返回0 //用迭代器范围刪除 : 把整个map清空 maps.erase(maps.begin(), maps.end()); //等同于mapStudent.clear()
3.查看数据
(1)我们经常直接用v[key]来查看
(2)v.at(key);
3.其他操作
(1)v.clear()//删除全部数据
(2)v.size()// 返回容器大小
(3)v.count(val)//返回val数据的数量
(4)v.empty()//返回是否空
(5)v.find(val)//返回第一个val的迭代器,否则返回end()一样的
(6)v.lower_bound(val)//返回第一个比val小的
(7)v.upper_bound(val)
遍历容器
//迭代 map< string,int>::iterator it; for(it = maps.begin(); it != maps.end(); it++) cout<<it->first<<" "<<itr->second<<endl;//输出key 和value值
如何自定义set排序?
在定义的时候就写好规则(比如从大到小)
五、multimap容器
与map几乎没有区别,头文件也是<map>,只是这个允许相同的键值共存