c++ set使用(增删查遍历)

C++编程语言学习 专栏收录该内容
10 篇文章 0 订阅

本文介绍set的增删查遍历实现,使用例子如下
下面程序统计出现的数字有哪些

#include <iostream>
#include<set>
using namespace std;
int main()
{
    int numList[6]={1,2,2,3,3,3};
    //1.set add
    set<int> numSet;
    for(int i=0;i<6;i++)
    {
        //2.1insert into set
        numSet.insert(numList[i]);
    }
    //2.travese set
    for(set<int>::iterator it=numSet.begin() ;it!=numSet.end();it++)
    {
        cout<<*it<<" occurs "<<endl;
    }
    //3.set find useage

    int findNum=1;
    if(numSet.find(findNum)!=numSet.end())
    {
        cout<<"find num "<<findNum<<" in set"<<endl;
    }else{
        cout<<"do not find num in set"<<findNum<<endl;
    }
    //set delete useage
    int eraseReturn=numSet.erase(1);
    if(1==eraseReturn)
    {
          cout<<"erase num 1 success"<<endl;
    }else{
        cout<<"erase failed,erase num not in set"<<endl;
    }
    return 0;
}

1.增加

调用insert成员函数,注意,set包含不重复的关键字,因此插入一个已经存在的元素对容器没有影响.

 numSet.insert(numList[i]);

2.遍历

使用set<int>::iterator it;迭代器遍历

3.查找

使用find函数查找
使用如

if(numSet.find(findNum)!=numSet.end())

find 返回一个迭代器,如果查找失败会返回end()元素,否则成功

4.删除

erase的返回值总是0和1,若返回0,表示删除的元素不在set中,如

 int eraseReturn=numSet.erase(1);

5.循环删除

如删除值为2的元素代码如下

#include <iostream>
#include<set>
using namespace std;
int main()
{
    int numList[6]={1,2,2,3,3,3};
    //1.set add
    set<int> numSet;
    for(int i=0;i<6;i++)
    {
        //2.1insert into set
        numSet.insert(numList[i]);
    }
    //2.travese set
    for(set<int>::iterator it=numSet.begin() ;it!=numSet.end();it++)
    {
        cout<<*it<<" occurs "<<endl;
    }
    cout<<"before delete numSet.size()= "<<numSet.size()<<endl;
    for(set<int>::iterator it=numSet.begin() ;it!=numSet.end();)
    {
        cout<<*it<<" occurs "<<endl;
        if(2==*it)
        {
            cout<<*it <<"delete"<<endl;
            it=numSet.erase(it);
            //numSet.earse(it++)
        }else{
            it++;
        }
    }
    cout<<"after delete numSet.size()= "<<numSet.size()<<endl;
    return 0;
}

注意,set.earse返回值是删除的迭代器的下一个
所以可以使用 iter = set.earse(iter)
也可以使用 set.earse(iter++)
在for循环中不要用++;

  • 4
    点赞
  • 4
    评论
  • 18
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值