set
众所周知set为集合之意,底层使用平衡二叉树——红黑树实现;插入删除操作仅仅需要指针操作节点即可完成,不涉及到内存的移动和拷贝,在set中,元素都是唯一的。而且在默认的情况下会对元素自动进行升序排序,支持集合的交,差,并,对称差等一些集合上的操作,如果在集合中的元素允许使用重复那么可以用multiset。
set常用操作
头文件在这里插入代码片
#include<set>
s.begin() 返回set容器的第一个元素
s.rbegin() 反向迭代器
s.end() 返回set容器的最后一个元素
s.clear() 删除set容器的所有元素
s.empty() 判断set容器`在这里插入代码片`是否为空
s.insert() 插入一个元素
s.erase() 删除一个元素
s.size() 返回当前set容器的元素个数
s.find() 查找一个元素,如果容器中元素不存在则返回s.end()
s.lower_bound() 返回第一个大于或等于给定关键值的元素
s.upper_bound() 返回第一个大于给定关键值的元素(注意两者均不是小于)
s.equal_range() 返回一对定位器,分别表示:第一个大于或等于给定关键值的元素 和 第一个大于大于关键值 的元素,返回值是一个pair类型、
如果这一对定位器中哪个返回失败,就会等于s.end();
s.equal_range().first表示大于或等于
s.equal_range().second表示大于
如果在set中插入一对数据怎么办?
#include<bits/stdc++.h>;
using namespacce std;
int main() {
pair<double, double>p1;
set<pair<double, double> >s;
p1.first = 1;
p1.second = 2;
s.insert(p1);
return 0;
}
pair
把两组数据合到一组,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。
一般当一个对象有多个属性的时候,我们会用结构体stuct写多个属性,而当只有两个属性的时候,就可以使用pair.
使用方法:
pair<type,type> name;
比如:
pair<int,int> P; //对象P有两个属性,都是int类型
而且,这里类型一般不做限制,所以自己定义的类型一样可以使用。
访问方法:
pair类型有两个属性值,一个first,一个second
int x=P.first; //访问P的第一个属性值
int y=P.second; //访问P的第二个属性值
比如迷宫里的一个点,对这个点进行广度优先搜索,则要进行上下左右四个变化,简化为两个既左移多少,右移多少.
map
map中有两个变量,一个是关键字,一个是关键字对应的值(key value)
比如一个学生的学号和他的名字
map详细用法请点击
构造函数 map<int,string> stu;
初始化
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<int, string> mapStudent;
mapStudent[1] = "student_one";
mapStudent[2] = "student_two";
mapStudent[3] = "student_three";
map<int, string>::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
}