STL 通用函数总结
1.头文件:
#include <set>
2.定义:
//set 内的元素只允许出来一次,如果需要集合中的元素允许重复那么可以使用multiset,multiset.earse(a)将删除容器内所有的a元素
//Set 默认容器内的元素升序排序
set<int> s //定义一个set容器 类型为int型
set<int, greater<int> > setb; //创建一个带大于比较器的set,需包含头文件functional
3.使用举例:
#include <iostream>
#include <algorithm>
#include <set>
#include <functional>
using namespace std;
//自定义比较函数
struct cmp
{
bool operator () (const int &a, const int &b)
{
return a > b;
}
};
//自定义结构体,包含比较函数
struct package
{
int id;
string data;
//自定义排序规则
bool operator<(const package& tmp) const
{
if(this->id < tmp.id)
return true; //自定义排序规则
return false;
}
};
void setprint(set<int > s)
{
for(set<int>::iterator it = s.begin(); it!= s.end(); it++)
cout << *it << " ";
cout<<endl;
return ;
}
int main()
{
set<int>::iterator it;//set<int>为迭代器类型,根据自己定义的容器类型定义
set<int>::reverse_iterator r_it;
set<int > seta; //默认是小于比较器less<int>的set
set<int, greater<int> > setb; //创建一个带大于比较器的set,需包含头文件functional
int a[5] = {1,2,3,4,5};
set<int > setc(a,a+5); //数组a初始化一个set;
cout<<"setc1"<<endl;
setprint(setc);
int b[4] = {11,12,13,14};
setc.insert(b,b+4); //将区间[b, b+4]里的元素插入容器
cout<<"setc2"<<endl;
setprint(setc);
set<int > setd(setc.begin(),setc.end()); //setc初始化一个set
cout<<"setd"<<endl;
setprint(setd);
//上述两例均为区间初始化
set<int > sete(setd); //拷贝构造创建set
cout<<"sete"<<endl;
setprint(sete);
set<int,cmp> setf(setc.begin(),setc.end());//与greater<int>作用相同
cout<<"setf"<<endl;
//setf类型为set<int,cmp>,与set<int>类型不符,所以不能调用函数输出
for(set<int,cmp>::iterator it = setf.begin(); it!= setf.end(); it++)
cout << *it << " ";
cout<<endl;
set<package> setg;//定义存放结构体类型变量
setg.insert({3,"a"});
setg.insert({2,"b"}); //插入
cout<<"setg"<<endl;
for(set<package>::iterator it= setg.begin(); it != setg.end(); it++)
cout << it->id << " " << it->data << endl;
if(setc.count(1))//用count函数代替查找
cout << "1在容器中" << endl;
if(!setc.count(20))//用count函数代替查找
cout << "20不在容器中" << endl;
return 0;
}