【STL】set容器、pair队组与map容器

目录

1.修改set容器排序规则

2. set容器的各种函数

 3.set构造函数multiset

4.创建pair队组 

5.map容器


1.修改set容器排序规则

set容器会自动以升序的方式进行排序,想要改变可以制定排序规则,set<int,排序规则> s;

但需要注意,在尖括号里面必须是类型,所以可以创建一个类,在类里面来实现我们的排序

#include<iostream>
#include<set>//头文件 
using namespace std;
void printset(set<int> &s)
{set<int>::iterator it=s.begin();for( ;it!=s.end();it++){cout<<*it<<" ";}cout<<endl;
}class myrule
{public:bool operator()(int v,int v2){return v>v2;}
};void printmyrule(set<int,myrule> &m)
{set<int,myrule>::iterator it=m.begin();for( ;it!=m.end();it++){cout<<*it<<" "; }cout<<endl;
}int main()
{set<int> s;//自动以升序排 s.insert(10);s.insert(30);s.insert(20);s.insert(50);s.insert(60);s.insert(40);printset(s);//set<int,排序规则> set<int,myrule> m;//myrule改变排序方式 m.insert(10);m.insert(30);m.insert(20);m.insert(50);m.insert(60);m.insert(40);printmyrule(m);return 0;} 

2. set容器的各种函数

  • find(x)函数若查找到返回的是该值的迭代器,若不存在,返回set.end();
  • lower_bound(x)  //下限,返回的是第一个key>=m元素的迭代器
  • upper_bound(x)  //上限,返回的是第一个key>m的迭代器
  • equal_range(x)  //返回x上下限的两个迭代器,所以只能用队组pair的方式来存储上下限

注意:set只有一个键值,也就是说不能有存入两个相同的数据,不然只会输出一个

#include<iostream>
#include<set>//头文件 
using namespace std;
void printset(set<int> &s)
{set<int>::iterator it=s.begin();for( ;it!=s.end();it++){cout<<*it<<" ";}cout<<endl;
}int main()
{set<int> s;//自动以升序排 s.insert(10);s.insert(30);s.insert(20);s.insert(50);s.insert(60);s.insert(40);printset(s);set<int>::iterator ret;ret=s.find(50);//因为find()返回的为迭代器,所以要用迭代器来装if(ret!=s.end()){cout<<"找到结果:"<<*ret; } cout<<endl;set<int>::iterator it;it=s.lower_bound(50);if(it!=s.end()){cout<<"下限为:"<<*it<<endl;}set<int>::iterator its;its=s.upper_bound(50);if(its!=s.end()){cout<<"上限为:"<<*its<<endl;}//pair<第一个值类型,第二个值类型>  返回两个值//以队组的方式储存上下限 pair<set<int>::iterator,set<int>::iterator> pa;//上下限是以迭代器的方式返回 pa=s.equal_range(50);if(pa.first!=s.end()){cout<<"下限为:"<<(*pa.first)<<endl; }if(pa.second!=s.end()){cout<<"下限为:"<<(*pa.second)<<endl; }return 0;} 

 3.set构造函数multiset

  • multiset与set最大的区别在于set不可以有两个相同的值,但multiset可以有相同的数值
  • multiset的头文件依旧为#include<set>

  • 如果有两个相同的值在set里,只会输出一个

4.创建pair队组 

  • pair的头文件可以是STL容器中的任意一个,如:vector、deque、stack、list、set、map,但string除外

5.map容器

  • map返回的有两个,键值k和实值,所以我们使用pair队组来接收map容器的返回值
  • map与set相同,只能有一个k值,不能有重复的,但multimap可以

#include<iostream>
#include<map>
#include<string>
using namespace std;
class student
{friend void printmap(map<int,student> &m);
private:int num;string name;float score;
public:student(){}student(int num,string name,float score){this->num=num;this->name=name;this->score=score;}
};
void printmap(map<int,student> &m)
{map<int,student>::iterator it=m.begin();for( ;it!=m.end();it++){cout<<(*it).first<<" "<<(*it).second.name<<" "<<(*it).second.score<<endl;}
}
int main()
{map<int,student> m;//方法一: m.insert(pair<int,student>(2000,student(2000,"chen",89.2f)));//方法二:(推荐)m.insert(make_pair(2001,student(2001,"zhang",68.2f)));//方法三:(危险)使用这个方法要确保m括号里面的k值存在 m[2002]=student(2002,"tian",98.2f);printmap(m);return 0;} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539325.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整型变量的原子操作

什么是原子操作 原子操作&#xff08;Atomic Operation&#xff09;是指不可中断的操作&#xff0c;即在多线程环境下&#xff0c;当一个线程在执行原子操作时&#xff0c;不会被其他线程的调度和中断所影响。这种操作在多线程编程中尤为重要&#xff0c;因为它能保证操作的原…

基于单片机的公交车IC卡操作系统的设计

目 录 摘 要 III Abstract IV 前 言 1 第一章 绪论 2 1.1 设计的背景和意义 2 1.2 设计的现状和发展 2 1.3 设计的目的与意义 2 第二章 总体设计 4 2.1 总体方案的设计与实现 4 2.1.1 主要设计的内容 4 2.1.2 系统的总体设计 4 2.2 系统方案论证 5 2.2.1 单片机的选择 6 2.2.2…

冒泡排序,详详解解

目录 基本概念&#xff1a; 上图&#xff1a; 核心思路&#xff1a; 基本步骤&#xff1a; 关键&#xff1a; 代码核心&#xff1a; 补充&#xff1a; 代码&#xff08;规范&#xff09; &#xff1a; 代码&#xff08;优化&#xff09;&#xff1a; 今天我们不刷力扣了&…

IP在网络通信中的重要作用

IP&#xff0c;全称Internet Protocol&#xff0c;即网际互连协议&#xff0c;是TCP/IP体系中的网络层协议。IP作为整个TCP/IP协议族的核心&#xff0c;是构成互联网的基础。它的作用重大且深远&#xff0c;下面将详细阐述IP的定义及其在网络通信中的重要作用。 首先&#xff0…

华为OD技术C卷“测试用例执行计划”Java解答

描述 示例 算法思路1 整体思路是&#xff0c;先读取特性的优先级和测试用例覆盖的特性列表&#xff0c;然后计算每个测试用例的优先级&#xff0c;并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序&#xff0c;输出测试用例的索引&#xff0c;即为执行顺序。…

怎么避免电脑数据被拷贝?电脑如何禁用USB功能?

在无纸化办公的今天&#xff0c;很多重要数据都存放在电脑中。为了避免数据泄露&#xff0c;需要采用安全的方式保护电脑数据。那么&#xff0c;该如何避免电脑数据被拷贝呢&#xff1f;下面我们就来了解一下。 方法一&#xff1a;物理隔绝 物理隔绝是一种原始但有效的USB禁用…

C++初阶 | [九] list 及 其模拟实现

摘要&#xff1a;介绍 list 容器&#xff0c;list 模拟实现 list&#xff08;带头双向循环列表&#xff09; 导入&#xff1a;list 的成员函数基本上与 vector 类似&#xff0c;具体内容可以查看相关文档(cplusplus.com/reference/list/list/)&#xff0c;这里不多赘述。以下对…

leetcode 热题 100_两两交换链表中的节点

题解一&#xff1a; 迭代&#xff1a;设置节点指针存储结果&#xff0c;遍历链表&#xff0c;直接修改节点的指向。 class Solution {public ListNode swapPairs(ListNode head) {ListNode result new ListNode();result.next head;ListNode temp result;while (temp.next …

下载chromedrive,使用自动化

1、先看一下自己浏览器的版本 2、访问 https://googlechromelabs.github.io/chrome-for-testing/

基于单片机的家庭防盗报警系统

摘 要 随着社会的发展&#xff0c;人们生活水平的不断提高和家居用品的高档化&#xff0c;家庭安全隐患也随之增加&#xff0c;所以人们便进一步提高了对家庭的保护意识。因此&#xff0c;这就不得不促使安全防盗报警系统的普及与推广。 然而传统的防盗措施难以实现人们的需求…

网络基础 - 预备知识(协议、网络协议、网络传输流程、地址管理)

文章目录 1. 认识 协议2. 了解 网络协议2.1 引入 协议分层2.2 OSI 七层模型 与 TCP/IP 四层模型 3. 网络传输 流程&#xff01;&#xff01;&#xff01;3.1 网络传输流程图3.2 关于报头3.3 实例解释 传输过程&#xff08;封装与解包&#xff09; 4. 网络中的地址管理4.1 认识 …

EMQX 4.0和EMQX 5.0集群架构实现1亿MQTT连接哪些改进

EMQX 5.0水平扩展能力得到了指数级提升&#xff0c;能够更可靠地承载更大规模的物联网设备连接量。 在EMQX5.0正式发布前的性能测试中&#xff0c;我们通过一个23节点的EMQX集群&#xff0c;全球首个达成了1亿MQTT连接每秒100万消息吞吐&#xff0c;这也使得EMQX 5.0成为目前为…