STL之二:set/multiset用法详解

使用set或multiset之前,必须加入头文件<set>
Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。
sets和multiset内部以红黑树实现

1)构造函数和析构函数

set c:创建空集合,不包含任何元素

set c(op):以op为排序准则,产生一个空的set
set c1(c2):复制c2中的元素到c1中
set c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
set c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。
c.~set()销毁所有元素,释放内存



multiset mc:创建空集合,不包含任何元素
multiset mc(op):以op为排序准则,产生一个空的set
multiset c1(c2):复制c2中的元素到c1中
multiset c(const value_type *first, const value_type* last):复制[first, last)之间元素构成新集合
multiset c(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新集合。

c.~set()销毁所有元素,释放内存

#include <iostream>
#include <set>
using namespace std;
int main(){
    set<int> s1;
    set<int,greater<int> > s2;

    for(int i = 1; i <= 6; i++){
        s1.insert(i);
        s2.insert(i);
    }

    set<int> s3(s1);

    //cout<<s1[0]<<endl;
    //cout<<s1.begin()<<endl;这两种输出,编译均会报错
    cout<<"s1:"<<endl;
    for(set<int>::iterator it = s1.begin(); it != s1.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    cout<<"s2"<<endl;
    for(set<int>::iterator it = s2.begin(); it != s2.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    cout<<"s3:"<<endl;
    for(set<int>::iterator it = s3.begin(); it != s3.end(); it++)
        cout<<*it<<' ';
    cout<<endl;
    return 0;
}



程序的运行结果如下:



2) 大小、判断空函数

int size() const:返回容器元素个数
bool empty() const:判断容器是否为空,若返回true,表明容器已空

3)增加、删除函数

pair<iterator,bool> insert( x):插入元素x
iterator insert(iterator it,x):在迭代器it处插入元素x
void insert(const value_type *first,const value_type *last):插入[first, last)之间元素
iterator erase(iterator it):删除迭代器指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素

size_type erase(const Key& key):删除元素值等于key的元素

#include <iostream>
#include <set>
using namespace std;
int main(){
    set<int> s;
    multiset<int> ms;

    for(int i = 6; i > 0; i--){
        s.insert(i);
        ms.insert(i);
    }

    cout<<"s:"<<endl;
    for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    s.erase(3);
    for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    s.insert(3);
    for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    cout<<"ms:"<<endl;
    ms.insert(3);
    for(multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    ms.erase(3);
    for(multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    ms.insert(3);
    ms.insert(3);
    ms.erase(ms.find(3));
    for(multiset<int>::iterator it = ms.begin(); it != ms.end(); it++)
        cout<<*it<<' ';
    cout<<endl;
    return 0;
}

程序的运行结果如下:



4)遍历函数

iterator begin():返回首元素的迭代器指针

iterator end():返回尾元素的迭代器指针

reverse_iterator rbegin():返回尾元素的逆向迭代器指针

reverse_iterator rend():返回首元素前一个位置的迭代器指针

5)操作函数

const_iterator lower_bound(const Key& key):返回容器中大于等于key的迭代器指针
const_iterator upper_bound(const Key& key):返回容器中大于key的迭代器指针

int count(const Key& key) const:返回容器中元素等于key的元素的个数

pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中元素值等于key的迭代指针[first, last)
const_iterator find(const Key& key) const:查找功能,返回元素值等于key的迭代器指针
void swap(set& s):交换集合元素

void swap(multiset& s):交换多集合元素  

#include <iostream>
#include <set>
using namespace std;
int main(){
    set<int> s;

    for(int i = 6; i > 0; i--)
        s.insert(i);

    cout<<"s:"<<endl;
    for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    s.erase(s.find(3));
    for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout<<*it<<' ';
    cout<<endl;

    cout<<*lower_bound(s.begin(),s.end(),3)<<endl;
    if(lower_bound(s.begin(),s.end(),3) != s.end())
        cout<<"Find"<<endl;
    else
        cout<<"Not find"<<endl;

    if(lower_bound(s.begin(),s.end(),6) != s.end())
        cout<<"Find"<<endl;
    else
        cout<<"Not find"<<endl;

    if(lower_bound(s.begin(),s.end(),12) != s.end())
        cout<<"Find"<<endl;
    else
        cout<<"Not find"<<endl;
    return 0;
}


程序的运行结果如下:



有待更新。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值