C++STL实验之set容器的应用

实验目的:

1.了解set的实现原理

2.熟练掌握set的基本操作

实验器材:

C++

实验内容:

实现两个学生集合的交、并、补

实验步骤:

#include<iostream>

#include<set>

using namespace std;

//案例:两个集合的交、并、差

class Stu

{

    string sno;

    string name;

public:

    Stu(string s,string n){sno=s;name=n;}

    void show()const{cout<<sno<<" "<<name<<endl;}

    bool operator<(Stu s2) const

    {

        return sno<s2.sno;

    }

};

class MySet

{

    set<Stu> s;

public:

    MySet(Stu *first,Stu *last):s(first,last){}

    void bing(MySet set2)

    {

        set<Stu> temp=s;

        set<Stu>::iterator it=set2.s.begin();

        for(;it!=set2.s.end();it++)

            temp.insert(*it);

        disp(temp);

        cout<<endl;

    }

    void jiao(MySet set2)

    {

        set<Stu> temp;

        set<Stu>::iterator i=s.begin();

        for(;i!=s.end();i++)

        {

            if(set2.s.find(*i)!=set2.s.end())

                temp.insert(*i);

        }

        disp(temp);

        cout<<endl;

    }

    void cha(MySet set2)

    {

        set<Stu> temp;

        set<Stu>::iterator i=s.begin();

        for(;i!=s.end();i++)

            if(set2.s.find(*i)==set2.s.end())

                temp.insert(*i);

        disp(temp);

    }

    void disp(set<Stu> s)

    {

        set<Stu>::iterator i=s.begin();

        for(;i!=s.end();i++)

            (*i).show();//*i是const

    }

};

int main()

{

    Stu s1[]={Stu("001","zhang"),Stu("002","lisi"),Stu("003","qian")};

    Stu s2[]={Stu("001","zhang"),Stu("004","qin"),Stu("003","qian")};

    MySet set1(s1,s1+3),set2(s2,s2+3);

//∪

    set1.bing(set2);

    cout<<endl;

//∩

    set1.jiao(set2);

    cout<<endl;

//-

    set1.cha(set2);

}

实验结果(附数据和图表):

wceOpC6b8bXlAAAAABJRU5ErkJggg==

实验结果分析及结论:

实验成功,成功地用set容器完成了两个集合的交、并、差运算。

利用find函数和insert函数遍历容器,完成实验要求。

实验心得体会和建议:

关联性容器set:set(不允许重复)、multiset(允许重复)——默认小到大,双向迭代器(迭代器不能加减比较),底层是红黑树——二叉排序树。

关联性容器概述: 关联性容器是C++ STL中的一类数据结构,其中的元素是按照一定的规则自动排序的。set和multiset是两个常见的关联性容器,它们都基于红黑树实现。

set和multiset的区别: 主要区别在于是否允许重复元素。set不允许容器中有相同的元素,而multiset可以包含重复元素。

默认排序规则: 这两个容器默认按照元素的小到大顺序进行排序。如果需要按照其他规则排序,可以通过提供自定义的比较函数来实现。

双向迭代器: 关联性容器提供双向迭代器,即可以前进也可以后退。但是,迭代器之间不能进行简单的加减操作,因为红黑树的结构并不保证元素的顺序和在线性结构中的位置一一对应。

底层实现: set和multiset的底层实现是红黑树,这是一种自平衡的二叉搜索树。红黑树的特性确保了在插入、删除等操作后树的高度保持相对平衡,从而保证了较高的检索效率。

                          

实验评价及结论:

实验指导老师签字:                                      年   月  日

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LucianaiB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值