c++ STL中的set用法

1.关于set的概念  

  set 是STL中的集合。

  集合我们都很熟悉,具有排异性,在这里set中也遵循这条规矩。 而且在set中,存在系统自动排序的操作。

2.set的常用函数

  set 与 vector具有类似的用法

#include<set> //set 的头文件 

set<int> s;  //声明一个int型set变量,名为s 
s.empty();   //判定 s 是否为空 
s.insert(1);  //把数字1插入到s中 
s.clear();     //清空s 
s.erase(1);  //假若s存在1,则删除1 
s.begin();    //返回s中第一个元素地址  所以 *s.begin() 
s.end();      //返回s中最后一个元素地址  
                  //这个特殊一点,返回的是s中最后一个元素的下一个元素 
                  //所以  *(--s.end())是s最后一个元素 
*s.rbegin();  //rbegin可以看做逆向的第一个地址   相当于(--s.end())  此处取的已经是s最后一个元素 
*s.rend();    //rend可以看做逆向的最后一个地址  相当于 s.begin() 
s.count(1);   //计算s中1出现的次数,而次数只存在0与1,所以可以借来查找是否存在1 
s.size();      //返回s中元素的个数 
s.max_size();    //s最大能存元素的数目 
*s.find(2);        //查找2 ,返回value所在位置,找不到value将返回end()
s1.swap(s2); //交换两个集合变量
set<int>::iterator iter; //迭代器
#include<iostream>
#include<set>
#include<vector>
using namespace std;
int main()
{
    vector<int> a;
    a.push_back(1);
    a.push_back(2);
    a.insert(a.begin(),3);//在向量起始位置增加新元素。vector中用insert插入时,须提供插入的位置
    a.insert(a.end(),3);//在向量末尾追加新元素。
    cout<<a[0]<<endl;
    cout<<a.at(1)<<endl;
    cout<<*a.begin()<<endl;
    cout<<a[2]<<endl;

    cout<<"set集开始"<<endl;
    set<int> s; //set没有push_back()/pop_back(),也不能用s[i],at(i)取值
    s.insert(1);
    s.insert(2);
    cout<<*s.begin()<<endl;
    cout<<*s.rbegin()<<endl;
    cout<<*s.rend()<<endl;
    cout<<*s.find(0)<<endl;
    return 0;
}
输出结果:

3
1
3
2
set集开始
1
2
1
2

erase(iterator)  ,删除定位器iterator指向的值

erase(first,second),删除定位器first和second之间的值

erase(key_value),删除键值key_value的值

//lower_bound(key_value) ,返回第一个大于等于key_value的定位器
//upper_bound(key_value), 返回最后一个大于等于key_value的定位器
#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(1);
    s.insert(3);
    s.insert(4);
    cout<<*s.lower_bound(2)<<endl;
    cout<<*s.lower_bound(3)<<endl;
    cout<<*s.upper_bound(3)<<endl;
    return 0;
}
输出结果:
3
3
4

练习题

Problem Description   给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素.
Input   每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
Output   针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.

Sample Input
1 2
1
2 3
1 2
1
1 2

Sample Output
1 2 3
1 2
#include<iostream>
#include<set>
using namespace std;
int main()
{
    int n,m,x;
    set<int>s;
    set<int>::iterator it;
    while (cin>>n>>m){
        s.clear();
        for (int i=0;i<n+m;i++){
            cin>>x;
            s.insert(x);
        }
        it=s.begin();
        int cnt=s.size();
        for (int i=1;i<=cnt;i++){
            if (i==1)
                cout<<*it;
            else 
                cout<<" "<<*it;
            it++;
        }
        cout<<endl;
    }
    return 0;
}

 

原文链接: https://www.cnblogs.com/LXJ-YZ/p/13166086.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    c++ STL中的set用法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/356978

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午11:31
下一篇 2023年3月2日 上午11:31

相关推荐