鱼C论坛

 找回密码
 立即注册
查看: 1104|回复: 0

[技术交流] C++旅程第17站——Set

[复制链接]
发表于 2020-6-23 21:22:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Kites rise highest against the wind,not with it.
                                     Set
set:所有元素都会在插入时自动被排序

set/multiset属于关联式容器,底层结构是用二叉树实现。

set和multiset区别:
set不允许容器中重复的元素——插入数据的同时会返回插入的结果,表示插入是否成功
multiset允许容器中有重复的元素——不会检测结果
#include<iostream>
#include<set>

using namespace std;

class Setcompare
{
        public:
                bool operator()(int v1,int v2)
                {
                        return v1 > v2;
                }
};

void printset(set<int>&s)
{
        for(set<int>::iterator it = s.begin(); it != s.end(); it++)
        {
                cout << *it << " ";
        }
        cout << endl;
}

void test1()
{
        set<int> s1;
        
        s1.insert(10);
        s1.insert(49);
        s1.insert(57);
        s1.insert(20);
        
        //set元素插入时会自动排序,不允许插入重复值 
        printset(s1); 
        
        //拷贝构造
        set<int> s2(s1);
        printset(s2); 
        
        //赋值
        set<int> s3;
        s3 = s2;
        printset(s3); 
} 

void test2()
{
        set<int> s1;
        
        s1.insert(10);
        s1.insert(50);
        s1.insert(30);
        s1.insert(83);
        
        if ( s1.empty() )
        {
                cout << "s1为空!!!!!!!" << endl;
        }
        else
        {
                cout << "s1不为空!!!!!!!!!!" << endl;
                cout << "s1的大小为: " << s1.size() << endl;
        }
        
        set<int> s2;
        
        s2.insert(56);
        s2.insert(27);
        s2.insert(47);
        s2.insert(83);
        
        cout << "交换前!!!!!!!!!!" << endl;
        printset(s1);
        printset(s2);
        
        cout << "交换后!!!!!!!!!!!!" << endl;
        s1.swap(s2);
        printset(s1);
        printset(s2);
         
}

void test3()
{
        set<int>s1;
        
        s1.insert(22);
        s1.insert(10);
        s1.insert(48);
        s1.insert(33);
        
        printset(s1);
        
        //删除
        s1.erase(s1.begin());//在这里一定要注意一点,他这里删除的是最小的,因为是在排序的基础上在删除的 
        printset(s1);
        
        s1.erase(33);
        printset(s1);
        
        //清空
        s1.erase(s1.begin(),s1.end());
        s1.clear();
        printset(s1);
         
}

void test4()
{
        set<int> s1;
        
        s1.insert(11);
        s1.insert(52);
        s1.insert(39);
        s1.insert(65);
        
        set<int>::iterator a = s1.find(11);
        
        if ( a != s1.end())
        {
                cout << "找到元素: " << *a << endl; 
        } 
        else
        {
                cout << "未找到元素!!!!!! " << endl;
        }
        
        int num = s1.count(52);
        cout << "num =  " << num << endl;
        
        s1.insert(52);
        s1.insert(52);
        
        num = s1.count(52);
        cout << "num = " << num << endl;
        //在set中,没有重复的数字,所以统计出来的结果不是0就是1 
}

void test5()
{
        set<int> s1;
        
        s1.insert(80);
        s1.insert(20);
        s1.insert(76);
        s1.insert(33);
        
        //默认升序 
        printset(s1);
        
        set<int,Setcompare>s2;
        
        s2.insert(65);
        s2.insert(75);
        s2.insert(28);
        s2.insert(47);
        
        //降序 
        for(set<int>::iterator it = s2.begin(); it != s2.end(); it++)
        {
                cout << *it << " ";
        }
        cout << endl;
}

int main()
{
        test1();//set构造和赋值 
        
        test2();//set大小和交换 
        
        test3();//set插入和删除 
        
        test4();//set查找和统计 
        
        test5();//set排序 
        
        return 0;
}
                                             




本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 07:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表