set和map的学习

文章目录

  • 1.set的原型
  • 2.set的成员函数
    • 1.构造函数
    • 2.代码演示
  • 3.map的原型
  • 4.map的成员函数
    • 1.构造函数
    • 2.代码演示
  • 5.OJ练习
    • 1.前K个高频单词
    • 2.两个数组的交集
    • 3.随即链表的复制

在这里插入图片描述

1.set的原型

template <class T,                   //set::key_typeclass Compare = less<T>,   //set::key_compareclass Alloc = allocator<T> //set::allocator_type   > 
class set;

2.set的成员函数

1.构造函数

//全缺省构造
explicit set(const key_compare& comp = key_compare(), const allocator_type& alloc = allocator_type());
//迭代器区间构造
template <class InputIterator>  
set(InputIterator first, InputIterator last, const key_compare& comp = key_compare(), const allocator_type& alloc = allocator_type());
//拷贝构造
set(const set& x);

2.代码演示

//插入、迭代器、范围for
void test_set1()
{//初始化1.0set<int> s;s.insert(3);s.insert(1);s.insert(4);s.insert(2);s.insert(1);s.insert(2);//初始化2.0//set<int> s = { 1,2,1 }; //set<int,greater<int> s = { 1,2,1 };   //显式传compare//初始化3.0//int a[] = { 1,2,1 };//set<int> s(a, a + sizeof(a) / sizeof(int));set<int>::iterator it = s.begin();while (it != s.end()){// 二叉搜索树不允许修改key--破坏二叉搜索树的原则cout << *it << " ";++it;}cout << endl;// 范围forfor (auto e : s){cout << e << " ";}cout << endl;//set遍历后数据变成有序的 -- 搜索二叉树中序遍历 -- 有序数据
}
//erase 查找是否存在:find/count 删除某个范围的值
void test_set2()
{set<int> s;s.insert(3);s.insert(1);s.insert(4);s.insert(2);s.insert(1);s.insert(2);s.erase(30);//erase的底层auto pos = s.find(30);if (pos != s.end()){s.erase(pos);}int x;while (cin >> x){/*	auto ret = s.find(x);if (ret != s.end()){cout << "yes" << endl;}else{cout << "no" << endl;}*///count在set里的取值: 1 0if (s.count(x)){cout << "yes" << endl;}else{cout << "no" << endl;}}set<int> s1;set<int>::iterator itlow, itup;for (int i = 1; i < 10; i++)s1.insert(i * 10); //10 20 30 40 50 60 70 80 90itlow = s1.lower_bound(25); //记录25或25后一个元素             itup = s1.upper_bound(60);  //记录55后一个元素的位置                          s1.erase(itlow, itup);      //[ , )             cout << "s1 contains:";for (auto it = s1.begin(); it != s1.end(); ++it)cout << ' ' << *it;cout << '\n';
}//多重set:multiset 允许键值冗余[重复]
void test_set3()
{multiset<int> ms;ms.insert(3);ms.insert(1);ms.insert(4);ms.insert(2);ms.insert(1);ms.insert(1);ms.insert(1);ms.insert(2);multiset<int>::iterator mit = ms.begin();while (mit != ms.end()){cout << *mit << " ";++mit;}cout << endl;//中序遍历的第一个xauto pos = ms.find(1);while (pos != ms.end() && *pos == 1){cout << *pos << " ";++pos;}cout << endl;cout << "1的个数" << ms.count(1) << endl;ms.erase(1);     //删除所有的1cout << "1的个数" << ms.count(1) << endl;cout << "2的个数" << ms.count(2) << endl;//删除第1个3auto pos = ms.find(3);if (pos != ms.end()){ms.erase(pos);}//删除第2个3++pos;if (pos != ms.end()){ms.erase(pos);}
}

3.map的原型

template < class Key,           // key_type     class T,             // mapped_type        class Compare = less<Key>, //key_compareclass Alloc = allocator<pair<const Key,T> >   // allocator_type> 
class map;

4.map的成员函数

1.构造函数

//全缺省默认构造
explicit map(const key_compare& comp = key_compare(), const allocator_type& alloc = allocator_type());
//迭代器区间构造
template <class InputIterator>  
map(InputIterator first, InputIterator last, const key_compare& comp = key_compare(), const allocator_type& alloc = allocator_type());
//拷贝构造
map(const map& x);

2.代码演示

/*
template <class T1, class T2>
struct pair
{T1 _key;T2 _value;pair(): _key(T1()), _value(T2()){}pair(const T1& a, const T2& b): _key(a), _value(b){}
};
*//*template <class T1,class T2>inline pair<Tl,T2> make_pair (Tl x, T2 y){return ( pair<T1, T2>(x, y) ); }
*///插入、迭代器、make_pair
void test_map1()
{map<string, string> m;//创建pair -- 传参pair<string, string> p("Kevin", "凯文");m.insert(p);//匿名对象m.insert(pair<string, string>("Kevin", "凯文"));//make_pairm.insert(make_pair("Eddie", "彭于晏"));m.insert(make_pair("Tom", "汤姆"));m.insert(make_pair("Jerry", "杰瑞"));//map<string, string>::iterator auto it = m.begin();while (it != m.end()){//cout << (*it).first << "-" << (*it).second << endl;cout << it->first << "-" << it->second << endl;++it;}cout << endl;for (const auto& e : m){cout << e.first << "-" << e.second << endl;}cout << endl;
}//count的功能[初识at]
/*
pair(const T1& a, const T2& b): _key(a), _value(b)
{}
1.查找
查找key是否存在
存在返回value的引用
不存在插入 pair( key, V() )  返回value的引用
2.查找 + 修改
查找key 存在 返回value的引用 将其赋值成新值--修改
3.查找 + 插入
查找key 不存在 插入key 分配value 返回value引用
*//*
V& at(const K& key);
查找key是否存在
存在返回value的引用
不存在抛异常
*/void test_map2()
{map<string, string> m;m.insert(make_pair("Eddie", "彭于晏"));m.insert(make_pair("Tom", "汤姆"));m.insert(make_pair("Jerry", "杰瑞"));//m.insert(make_pair("Eddie", "(彭于晏)")); // 插入失败:已经有了string:key不能重复m["abc"];			 // 查找+插入: m中没有abc 插入abc并调用默认构造为其分配一个映射值即value  返回value的引用m["ABC"] = "牛顿";   // 查找+插入+赋值: m中没有ABC 插入ABC并调用默认构造为其分配一个映射值即value  返回value的引用 将value赋值为"牛顿" m["Eddie"] = "埃迪"; // 查找+修改: m中有Eddie 返回与其匹配的value的引用 将其修改为埃迪cout << m["string"] << endl; // 查找输出string对应的value值
}//统计玩具次数
void test_map3()
{string s[] = { "陀螺", "陀螺", "洋娃娃", "陀螺", "洋娃娃", "洋娃娃", "陀螺", "洋娃娃", "悠悠球", "洋娃娃", "悠悠球", "乐高" };//法一://map<string, int> count;//   for (auto& key : s)//{//	auto pos = count.find(key);//	if (pos == count.end()) //没找到 map里没有此元素 插入//	{//		count.insert(make_pair(key, 1));//	}//	else//	{//		pos->second++;//	}//}//法二:map<string, int> count;for (auto& key : s){/*template<class K,class V>class map{K _key;V _value;};template <class T1, class T2>struct pair{T1 first;T2 second;pair(): first(T1()), second(T2()){}pair(const T1& a, const T2& b): first(a) , second(b){}};insert函数调用 pair<iterator,bool> insert(const pair<K,V>& p);       iterator insert(iterator pos, const pair<K,V>& p);     //在pos处 插入一个键值对 返回pos迭代器template <class InputIterator>  void insert(InputIterator first, InputIterator last);  //迭代器区间构造 返回值为voidV& operator[](const K& key){pair<iterator, bool> it = insert( make_pair( key, V() ) );//插入一个键值对  返回键值对类型return it.first->second; //返回value的引用//it是一个键值对类型 //it.first: 访问类pair的first成员变量 在此pair里first类型为iterator 即it.first为指向key的迭代器[结构体指针类型]//访问value: (*it.first).second == it.first->second}*///key不在count 插入pair( key, int() ) iterator指向key      bool-true//key在count                          iterator指向原有key  bool-falsecount[key]++;}for (auto& toy : count){cout << toy.first << ":" << toy.second << endl;}
}

5.OJ练习

1.前K个高频单词

前K个高频单词
在这里插入图片描述

2.两个数组的交集

两个数组的交集
在这里插入图片描述

3.随即链表的复制

随机链表的复制
在这里插入图片描述

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

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

相关文章

[JAVAee]Spring MVC

目录 Spring MVC框架 MVC Spring MVC的功能 用户与程序的连接 RequestMapping 指定为Get请求 指定为Post请求 获取参数 单个参数 表单传递多个参数 传递对象 后端参数重命名(后端参数映射) 设置参数必传/非必传 获取JSON对象 获取URL中的参数 上传文件 获取…

Javascript小案例-进度条(配置对象版)

gif演示图&#xff1a; 代码&#xff1a; 进度条(配置对象版).html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…

eNSP基础网络学习-v02

一、eNSP 1.什么是eNSP eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化操作的网络仿真工具平台&#xff0c;主要对企业网络路由器、交换机进行软件仿真&#xff0c;完美呈现真实设备实景&#xff0c;支持大型网络模拟&#xff0c;让…

怎样防止员工泄露技术?(十条避免公司泄密的措施)

在当今信息化社会&#xff0c;公司信息的安全性和保密性显得尤为重要。一旦公司信息泄露&#xff0c;不仅会对公司的经营造成严重影响&#xff0c;还可能引发法律纠纷。因此&#xff0c;采取有效的措施来防止公司信息泄露是非常必要的。以下是一些具体的措施&#xff1a; 部署洞…

【1993. 树上的操作】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一棵 n 个节点的树&#xff0c;编号从 0 到 n - 1 &#xff0c;以父节点数组 parent 的形式给出&#xff0c;其中 parent[i] 是第 i 个节点的父节点。树的根节点为 0 号节点&#xff0c;所以 par…

【完全二叉树魔法:顺序结构实现堆的奇象】

本章重点 二叉树的顺序结构堆的概念及结构堆的实现堆的调整算法堆的创建堆排序TOP-K问题 1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构…

kafka消费者多线程开发

目录 前言 kafka consumer 设计原理 多线程的方案 参考资料 前言 目前&#xff0c;计算机的硬件条件已经大大改善&#xff0c;即使是在普通的笔记本电脑上&#xff0c;多核都已经是标配了&#xff0c;更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单…

pom.xml中解决“vulnerable dependency maven:org.yaml:snakeyaml:1.33“警告问题

问题 当我们引入依赖的时候&#xff0c;pom文件会有这样的提示&#xff0c;其大概的意思就是 maven:org.yaml:snakeyaml:1.30"表示通过Maven引入了一个潜在的安全漏洞依赖项"org.yaml:snakeyaml:1.30" 解决办法 其实我们就是要更改这个依赖的版本&#xff0c…

【李沐深度学习笔记】按特定轴求和

课程地址和说明 线性代数实现p4 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 这节就算之前内容的复习&#xff0c;后面以截图形式呈现 这节课就简单说明以下&#xff0c;axis为0是行&#xff0c;1是列&#xf…

解决方案:TSINGSEE青犀+智能分析网关助力智慧仓储智能化监管

为全面保障物流仓储的安全性与完整性&#xff0c;解决仓库管理难题&#xff0c;优化物流仓储方式&#xff0c;提升仓储效率&#xff0c;降低人工成本&#xff0c;旭帆科技推出智慧仓储AI视频智能分析方案&#xff0c;利用物联网、大数据、云计算等技术&#xff0c;对仓储管理进…

Date类的学习笔记-超级详细

Date 的定义, 在开始研究这个之前我们首先要能够明白一点&#xff0c;这个 Date 其实本质上是一个对象&#xff0c;我们通过这个对象可以去构建变量&#xff0c;知道这个之后就可以开展后续的研究了 JDK 通用 Date 类的构造方法 测试 获取当前的时间 // 构造这个日期对象Date…

【@PostConstruct、 @Autowired与构造函数的执行顺序】

PostConstruct、 Autowired与构造函数的执行顺序 一、PostConstruct介绍二、Spring框架中在bean初始化和销毁时候执行实现方式三、项目验证1.MyServiceImpl2.测试结果3. 项目源码 最近对同事代码进行codeReview时候发现用PostConstruct注解&#xff0c;特地对此注解执行顺序进行…

IDEA2023新UI回退老UI

idea2023年发布了新UI&#xff0c;如下所示 但是用起来真心不好用&#xff0c;各种位置也是错乱&#xff0c;用下面方法可以回退老UI

【C刷题】day3

一、选择题 1、已知函数的原型是&#xff1a; int fun(char b[10], int *a); &#xff0c;设定义&#xff1a; char c[10];int d; &#xff0c;正确的调用语句是&#xff08; &#xff09; A: fun(c,&d); B: fun(c,d); C: fun(&c,&d); D: fun(&c,d); 【答案…

07_ElasticSearch:倒排序索引与分词Analysis

07_ElasticSearch&#xff1a;倒排序索引与分词Analysis 一、 倒排索引是什么&#xff1f;1.1 通过示例&#xff0c;简单理解下1.2 核心组成 二、倒排索引是怎么工作的&#xff1f;2.1 创建倒排索引2.2 倒排索引搜索 三、Analysis 进行分词3.1 Analyzer 由三部分组成3.2 Analyz…

【JS】—垃圾回收机制

一、指令材料 1.定义 JavaScript&#xff08;JS&#xff09;的垃圾回收机制是一种自动管理内存的过程&#xff0c;它有助于释放不再使用的内存&#xff0c;以避免内存泄漏和提高程序的性能。 JavaScript的垃圾回收机制是一种自动管理内存的方式&#xff0c;以确保不再被引用的…

Linux Shell 实现一键部署podman

podman 介绍 使用 Podman 管理容器、Pod 和映像。从本地环境中无缝使用容器和 Kubernetes&#xff0c;Podman 提供与 Docker 非常相似的功能&#xff0c;它不需要在你的系统上运行任何守护进程&#xff0c;并且它也可以在没有 root 权限的情况下运行。 Podman 可以管理和运行…

Hive 的函数介绍

目录 ​编辑 一、内置运算符 1.1 关系运算符 1.2算术运算符 1.3逻辑运算符 1.4复杂类型函数 1.5对复杂类型函数操作 二、内置函数 2.1数学函数 2.2收集函数 2.3类型转换函数 2.4日期函数 2.5条件函数 2.6字符函数 三、内置的聚合函数 四、内置表生成函数 五、…

Android Jetpack组件架构:Lifecycle的使用 和 原理

Android Jetpack组件架构&#xff1a;Lifecycle的使用和原理 导言 作为Jetpack中关于生命周期管理的核心组件&#xff0c;Lifecycle组件是其他比如LiveDate和ViewModel等组件的基础&#xff0c;本篇文章主要就将介绍关于Lifecycle的使用和它的运作原理。 Lifecycle的使用 我…

MyBatis 中的插件可以拦截哪些操作

MyBatis 中的插件可以拦截哪些操作 MyBatis 是一个优秀的持久化框架&#xff0c;在实际项目开发中广泛应用。MyBatis 的插件机制可以方便地对 MyBatis 的各个环节进行扩展和定制。在本文中&#xff0c;我们将详细介绍 MyBatis 中的插件机制&#xff0c;并探讨插件可以拦截哪些…