STL容器:set用法(一)

set容器概念:

        1.set容器属于集合容器,其元素值称为关键字。set中元素的关键字是唯一的。(multiset中元素的关键字可以不唯一。)

        2.默认情况下会对元素按关键字自动进行升序排列

        3.所以查找速度比较快,同时支持交、差和并等一些集合上的运算

        4.如果需要集合中的元素允许重复,那么可以使用multiset。(multiset是多重集合容器)

        5.由于set中没有相同关键字的元素,在向set中插入元素时,如果已经存在则不插入

        6.multiset中允许存在两个相同关键字的元素,在删除操作时删除multiset中值等于elem的所有元素,若成功则返回删除个数,否则返回0。

set/multiset的成员函数如下:

        begin()--返回指向第一个元素的迭代器

        clear()--清除所有元素

        count()--返回某个值元素的个数

        empty()--如果集合为空,返回true

        end()--返回指向最后一个元素的迭代器

        equal_range()--返回集合中与给定值相等的上下限的两个迭代器

        erase()--删除集合中的元素

        find()--返回一个指向被查找到元素的迭代器

        get_allocator()--返回集合的分配器

        insert()--在集合中插入元素

        lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

        key_comp()--返回一个用于元素间值比较的函数

        max_size()--返回集合能容纳的元素的最大限值

        rbegin()--返回指向集合中最后一个元素的反向迭代器

        rend()--返回指向集合中第一个元素的反向迭代器

        size()--集合中元素的数目

        swap()--交换两个集合变量

        upper_bound()--返回大于某个值元素的迭代器

        value_comp()--返回一个用于比较元素间的值的函数

set容器运用的简单例子:

题目:

        有两个整数序列,分别为{3,2,4,8}、{1,2,4,5,3},设计一个算法求它们的公共元素,要求使用set的集合算法。

代码:

#include <stdio.h>
#include <set>
using namespace std;

// 传入s1,s2,s3参数;并定义set地址指针,指向交集s3的地址,使形参改变实参;取s1,s2的交集存于s3
void solve(set<int>s1, set<int>s2, set<int>&s3)   // 不加 &不能改变 s3(&可指向s3地址,改变其值)
{
    set<int>::iterator it1, it2;   // 定义set容器迭代器 it        
    it1 = s1.begin();       // set容器迭代器指向对应地址  
    it2 = s2.begin();       // set容器迭代器指向对应地址 
    while(it1!=s1.end() && it2!=s2.end()){
        if(*it1 == *it2){
            s3.insert(*it1);
            it1++;
            it2++;
        }
        else if(*it1 < *it2)
            it1++;
        else
            it2++;
    }
}

// 输出集合中的元素(输出函数)
void dispset(set<int>s)
{
    set<int>::iterator it;
    for(it=s.begin(); it!=s.end(); it++){
        printf("%d ", *it);
    }
    printf("\n");
}

int main()
{
    int a[] = {3,2,4,8};
    int n = sizeof(a)/sizeof(a[0]);//计算a数组长度
    set<int>s1(a,a+n);  //定义set容器s1,并用数组a[]的元素初始化
    int b[] = {1,2,4,5,3};
    int m = sizeof(b)/sizeof(b[0]);//计算b数组长度
    set<int>s2(b,b+m);  定义set容器s2,并用数组b[]的元素初始化
    set<int> s3;
    solve(s1, s2, s3);
    printf("运行结果如下: \n");
    printf(" s1: ");
    dispset(s1);
    
    printf(" s2: ");
    dispset(s2);
    
    printf(" s3: ");
    dispset(s3);
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值