【C++】set容器使用

版权声明:made by YYT https://blog.csdn.net/qq_37621506/article/details/83348168

1.定义

set容器可以根据元素的值自动进行排序,不允许元素重复

2.基本操作

操作 函数
声明 set<类型> s
返回指向第一个元素的迭代器 s.begin()
返回指向最后一个元素的迭代器 s.end()
返回某个值元素的个数 s.count()
集合中元素的数目 s.size()
返回集合能容纳的元素的最大限值 s.max_size()
返回指向集合中最后一个元素的反向迭代器 s.rbegin()
返回指向集合中第一个元素的反向迭代器 s.rend()
清除所有元素 s.clear()
删除集合中的元素 s.erase()
如果集合为空,返回true s.empty()
返回一个指向被查找到元素的迭代器 s.find()
在集合中插入元素 s.insert()
交换两个集合变量 s.swap()
迭代器 set<类型>::iterator it
返回第一个key>=keyelem元素的迭代器 s.lower_bound(keyelem)
返回第一个key>keyelem元素的迭代器 s.upper_bound(keyelem)
返回容器中key与keyelem相等的上下限的俩个迭代器 s.equal_range(keyelem)

3.例子

int main(){
    set<int> s;
    s.insert(1);
    s.insert(5);
    s.insert(8);
    s.insert(2);
    s.insert(101);
    s.insert(1);
    s.insert(4);//[1,2,4,5,8,101]
    cout<<s.max_size()<<endl;//234565^
    cout<<s.size()<<endl;//6
    cout<<s.count(1)<<endl;//1
    cout<<*s.upper_bound(5)<<endl;//8
    set<int>::iterator t;
    for(t=s.begin();t!=s.end();t++)
        cout<<*t<<endl;
    return 0;
}

4.例题

set容器需要排序存放,因此在自定义类型的时候,要确定比较规则

#include<set>
using namespace std;
class Person{//定义Person类,存放人的年龄和id
    public:
        Person(int age, int id): id(id), age(age){}
    public:
        int id;
        int age;
};
class mycompare2{//定义比较类,比较人的年龄大小
    public: bool operator()(Person p1, Person p2){
        return p1.age > p2.age;//从大到小
    }
};
int main(){
    set<Person, mycompare2> sp; //set需要排序
    Person p1(10,60), p2(30, 40), p3(50, 20);
    sp.insert(p1); sp.insert(p2); sp.insert(p3);
    for(set<Person, mycompare2>:: iterator it = sp.begin(); it != sp.end(); it++){
            cout << it->age << " " << it->id << endl;
    }
    cout << "--------" << endl;
}

猜你喜欢

转载自blog.csdn.net/qq_37621506/article/details/83348168