STL - set 常用用法总结

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;
}

猜你喜欢

转载自blog.csdn.net/qq_39535750/article/details/80117566