当前位置: 首页 > article >正文

C++之set/multise容器

C++之set/multise容器

set基本概念
在这里插入图片描述

set构造和赋值

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;

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

void test()
{
    set<int> s1;

    //插入数据,只有insert方式
    s1.insert(10);
    s1.insert(40);
    s1.insert(20);
    s1.insert(40);
    s1.insert(30);

    //set容器特点: 所有元素插入时候自动被排序
    //set容器不允许插入重复值
    PrintfSet(s1);

    //拷贝构造
    set<int>s2(s1);
    PrintfSet(s2);

    //赋值操作
    set<int>s3;
    s3 = s1;
    PrintfSet(s3);
}

int main()
{
    test();
    cout << "Hello World!" << endl;
    return 0;
}

在这里插入图片描述

set大小和交换

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;

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

void test()
{
    set<int> s1;

    //插入数据,只有insert方式
    s1.insert(10);
    s1.insert(40);
    s1.insert(20);
    s1.insert(40);
    s1.insert(30);

    //set容器特点: 所有元素插入时候自动被排序
    //set容器不允许插入重复值
    PrintfSet(s1);

    if(s1.empty())
    {
        cout<<"s1 is empty"<<endl;
    }
    else
    {
        cout<<"s1 is not empty"<<endl;
        cout<<"s1's size is "<<s1.size()<<endl;
    }

    set<int>s2;
    s2.insert(100);
    s2.insert(200);
    s2.insert(300);
    s2.insert(400);
    //swap
    cout<<"before swap"<<endl;
    PrintfSet(s1);
    PrintfSet(s2);

    s2.swap(s1);
    cout<<"after swap"<<endl;
    PrintfSet(s1);
    PrintfSet(s2);
}

int main()
{
    test();
    cout << "Hello World!" << endl;
    return 0;
}

在这里插入图片描述

set插入和删除

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;

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

void test()
{
    set<int> s1;

    //插入数据,只有insert方式
    s1.insert(10);
    s1.insert(40);
    s1.insert(20);
    s1.insert(40);
    s1.insert(30);

    //set容器特点: 所有元素插入时候自动被排序
    //set容器不允许插入重复值
    PrintfSet(s1);

    s1.erase(s1.begin());
    PrintfSet(s1);

    s1.erase(30);
    PrintfSet(s1);

    //s1.erase(s1.begin(),s1.end());
    s1.clear();

}

int main()
{
    test();
    cout << "Hello World!" << endl;
    return 0;
}

在这里插入图片描述

set查找和统计

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;

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

void test()
{
    set<int> s1;

    //插入数据,只有insert方式
    s1.insert(10);
    s1.insert(40);
    s1.insert(20);
    s1.insert(40);
    s1.insert(30);

    //set容器特点: 所有元素插入时候自动被排序
    //set容器不允许插入重复值
    PrintfSet(s1);

    set<int>::iterator pos = s1.find(30);
    if(pos != s1.end())
    {
        cout<<"have finded"<<endl;
    }
    else
    {
        cout<<"no find"<<endl;
    }
//对于set而言 统计结果 要么是0 要么是1
    int num = s1.count(30);
    cout<<"num is "<<num<<endl;
}

int main()
{
    test();
    cout << "Hello World!" << endl;
    return 0;
}

在这里插入图片描述

set与multise区别

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;

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

void test()
{
    set<int> s1;

    //插入数据,只有insert方式
    pair<set<int>::iterator,bool> ret = s1.insert(10);
    if(ret.second)
    {
        cout<<"insert success at first"<<endl;
    }
    else
    {
        cout<<"insert fail at first"<<endl;
    }

    ret = s1.insert(10);
    if(ret.second)
    {
        cout<<"insert success at second"<<endl;
    }
    else
    {
        cout<<"insert fail at second"<<endl;
    }

    multiset<int>m1;
    //允许插入重复值
    m1.insert(10);
    m1.insert(10);
    m1.insert(10);
    m1.insert(10);
    for(multiset<int>::iterator it = m1.begin();it != m1.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}

int main()
{
    test();
    cout << "Hello World!" << endl;
    return 0;
}

在这里插入图片描述

pair对组的创建

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;

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

void test()
{
    //第一种方式
    pair<string,int>p("Tom",20);
    cout<<"name is "<<p.first<<"age is "<<p.second<<endl;

    //第二种方式
    pair<string,int>p2 = make_pair("Jin",21);
    cout<<"name is "<<p2.first<<"age is "<<p2.second<<endl;
}

int main()
{
    test();
    cout << "Hello World!" << endl;
    return 0;
}

在这里插入图片描述

set排序

在这里插入图片描述

#include <iostream>
#include<set>
using namespace std;

void PrintfSet(set<int>&s)
{
    for(set<int>::iterator it = s.begin();it != s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
class MyCompare
{
public:
    bool operator()(int v1,int v2)
    {
        return v1>v2;
    }
};

void test()
{
    set<int>s1;
    s1.insert(10);
    s1.insert(40);
    s1.insert(30);
    s1.insert(50);
    s1.insert(20);
    PrintfSet(s1);

    //指定排序规则为从大到小
    set<int,MyCompare>s2;

    s2.insert(10);
    s2.insert(40);
    s2.insert(30);
    s2.insert(50);
    s2.insert(20);

    for(set<int,MyCompare>::iterator it = s2.begin();it != s2.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}

int main()
{
    test();
    cout << "Hello World!" << endl;
    return 0;
}

在这里插入图片描述

set存放自定义数据

#include<iostream>
#include<string>
using namespace std;
#include<set>
//set容器排序,存放自定义数据类型
class Person
{
public:
	Person(string name,int age)
	{
		this->m_name = name;
		this->m_age = age;
	}
	string m_name;
	int m_age;
};

class MyCompare
{
public:
	bool operator()(const Person&p1, const Person& p2)
	{
		//按照年龄进行降序
		return p1.m_age > p2.m_age;
	}
};

void test()
{
	//指定排序规则为从大到小
	set<Person, MyCompare>s;

	//创建Person对象
	Person p1 ("liubei",23);
	Person p2("zhangfei", 21);
	Person p3("guanyu", 22);
	Person p4("zhaoyun", 24);

	s.insert(p1);
	s.insert(p2);
	s.insert(p3);
	s.insert(p4);

	for (set<Person, MyCompare>::iterator it = s.begin();it != s.end();it++)
	{
		cout << "name is " << (*it).m_name << "age is " << (*it).m_age << endl;
	}
	cout << endl;
}

int main()
{
	test();
	system("pause");
	return 0;
}

在这里插入图片描述


http://www.kler.cn/a/132632.html

相关文章:

  • React Native 全栈开发实战班 - 数据管理与状态之Zustand应用
  • 【学习笔记】科学计算
  • WPF的基础控件详解
  • .NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper
  • day03(单片机高级)RTOS
  • 经验笔记:Git 基础操作指南
  • Linux 无名管道实现文件复制
  • 阿里面试面试题
  • 【P1010 [NOIP1998 普及组] 幂次方】
  • C#匿名方法介绍Action、Func、柯里化Currying
  • 1234234234
  • PostgreSQL按月计算每天值的累加
  • Java之线程的概念及方法的学习
  • JVM实战-JVM之类加载时机
  • C++构造函数 拷贝构造函数 括号法显示法隐式转换法实现类
  • openGauss学习笔记-126 openGauss 数据库管理-设置账本数据库-归档账本数据库
  • 鸿蒙LiteOs读源码教程+向LiteOS中添加一个系统调用
  • Unity - Cinemachine
  • SQL题
  • 深信服AC应用控制技术
  • 解决Kibana初始化失败报错: Unable to connect to Elasticsearch
  • dataspace
  • 16位 (MCU) R7F101G6G3CSP、R7F101G6E3CSP、R7F101G6G2DSP、R7F101G6E2DSP是新一代RL78通用微控制器
  • uniapp基础学习笔记01
  • 【网络安全】伪装IP网络攻击的识别方法
  • idea2023.2.3版本出现reading maven projects的进度条一直卡住的问题