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.mfbz.cn/a/162401.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

链表题(4)

本章内容 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 今天继续给大家带来链表的相关练习题。 相交链表 这道题来自力扣网&#xff0c;链接…

央企太卷.....来自央企的7个面试题,一个一个生产难题

说在前面 在40岁老架构师尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;最近小伙伴&#xff0c;面试央企、美团、京东、阿里、 百度、头条等大厂。 下面是一个小伙伴成功拿到通过了一个央企设计研究院一面面试&#xff0c;现在把面试真题和参考答案收入咱们的宝典。…

FDM(傅里叶分解)

代码的使用教程 傅里叶分解&#xff08;FDM&#xff09; 代码原理 FDM (Frequency Division Multiplexing)是一种调制技术&#xff0c;将信号分成多个不同的频带进行传输&#xff0c;从而实现多路复用的通信方式。FDM分解原理是将不同频率的信号分解成不同的频带&#xff08;子…

网工内推 | Linux运维,六险二金,最高30K,IE认证优先

01 上海域起 招聘岗位&#xff1a;Linux运维工程师 职责描述&#xff1a; 1.负责游戏产品运维相关的工作&#xff0c;流程文档、技术文档、功能脚本的编写整理 2.负责分析并排除系统、数据库、网络、应用等游戏产品运维中出现的故障及错误 3.负责对游戏产品项目进行线上部署、…

阿里AoneFlow分支管理

分支模式 1.TrunkBased模式 工作方式 TrunkBased 模式是持续集成思想所崇尚的工作方式&#xff0c;它由单个主干分支和许多发布分支组成&#xff0c;每个发布分支在特定版本的提交点上从主干创建出来&#xff0c;用来进行上线部署和 Hotfix&#xff08;补丁&#xff09;。 …

制作Go程序的Docker容器

今天突然遇到需要将 Go 程序制作成 Docker 的需求&#xff0c;所以进行了一些研究。方法很简单&#xff0c;但是官方文档和教程有些需要注意的地方&#xff0c;所以写本文进行记录。 源程序 首先介绍一下示例程序&#xff0c;示例程序是一个 HTTP 服务器&#xff0c;会显示si…

一次java系统调优 从150到最高1800的过程

前言 在做公司系统压力测试(500个线程并发)的时候 某个服务的接口 压测初始结果如下 初始指标(最高)&#xff1a; 吞吐量 150/s TPS: 240 CPU,内存&#xff0c;带宽&#xff0c;磁盘io 如下图所示 可以看到资源使用是有问题的 cpu和带宽并没有给足压力 说明并不是资源所导致…

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 动规五部曲 确定dp数组及其下标含义&#xff1a;dp[i][j] 表示从&#xff08;0,0&#xff09;出发&#xff0c;到&#xff08;i,j&#x…

计算机科学速成课

建议看看计算机科学速成课&#xff0c;一门很全面的计算机原理入门课程&#xff0c;短短10分钟可以把大学老师十几节课讲的东西讲清楚&#xff01;整个系列一共41个视频&#xff0c;B站上有中文字幕版。 每个视频都是一个特定的主题&#xff0c;例如软件工程、人工智能、操作系…

Django的可重用HTML模板示例

01-配置并运行Django项目 首先按照博文 https://blog.csdn.net/wenhao_ir/article/details/131166889配置并运行Django项目。 02-创建可重用模板文件 templates目录下新建目录common&#xff0c;然后在目录common下新建文件&#xff1a;navbar.html&#xff0c;并写入下面的…

Pandas 求平均值

Pandas是Python中最流行的数据分析库之一&#xff0c;它提供了许多强大的工具来处理和分析数据集。其中&#xff0c;求平均值是数据分析中最常见的操作之一。在本文中&#xff0c;我们将从多个角度分析Pandas中如何求平均值。 一、基础操作 Pandas中求平均值的基础操作是使用m…

电磁场与电磁波part3--静态电磁场及其边值问题的解

1、当场源&#xff08;电荷、电流&#xff09;不随时间变化时&#xff0c;所产生的电场、磁场也不随时间变化&#xff0c;称为静态电磁场。静止电荷产生的静电场、在导电媒质中恒定运动电荷形成的恒定电场以及恒定电流产生的恒定磁场都属于静态电磁场。 2、静电场基本方程微分形…

深信服AC应用控制技术

拓扑图 目录 拓扑图 一.上班时间不允许使用qq(假设上班时间是上午9到12&#xff0c;下午14到18) 1.新增上班时间不允许使用qq访问权限策略 2.将策略应用到组&#xff0c;例如修仙部 3.验证 上班时间发现登录不了 下班时间可以登录 二.上班时间不允许访问视频网站(假设上班时…

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

梦想编织者——Adobe Dreamweaver

今天&#xff0c;我们来谈谈一款在Adobe系列中推出的一款Adobe Dreamweaver&#xff0c;简称“DW”&#xff0c;中文名称 “梦想编织者”&#xff0c;是集网页制作和管理网站于一身的所见即所得网页代码编辑器。 利用对 HTML、CSS、JavaScript等内容的支持&#xff0c;设计人员…

java并发编程JUC:一、专栏配置+进程与线程+并行和并发+同步和异步+线程的创建、调用、查看、运行原理和相关API

专栏配置 pom.xml <properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies><dependency><groupId>org.projectlombok<…

(论文阅读46-50)图像描述2

46.文献阅读笔记 简介 题目 Learning a Recurrent Visual Representation for Image Caption Generation 作者 Xinlei Chen, C. Lawrence Zitnick, arXiv:1411.5654. 原文链接 http://www.cs.cmu.edu/~xinleic/papers/cvpr15_rnn.pdf 关键词 2014年rnn图像特征和文本特…

目录自动清洗

文章目录 前言一、需求分析二、操作步骤详解&#xff08;标准章节&#xff09;1. 提取文章目录2. 更改保存目录.txt3. 二级标题前面加4个空格4. 在章字和节字后面添加一个空格5. 在页码前面加上>符号6. 代码完全体 三、进阶一&#xff08;有章无节小数二级标题&#xff09;1…

git基础命令

git简介 什么是git&#xff1f; git是一种分布式版本控制系统。 git与svn之间的区别是什么&#xff1f; svn是集中式版本控制系统。git是分布式版本控制系统。 什么是集中式版本控制系统&#xff1f;有哪些特点&#xff1f; 版本库是集中存放在中央服务器。集中式版本控制…