STL Map学习总结

1、 Map是关联容器,以键值对的形式进行存储,方便进行查找,关键词起到索引的作用,值则表示与索引相关联的数据,以红黑树的结构实现,插入删除等操作都可以在O(log n)时间内完成

2、它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。

//map关联容器
//提供一对一的关系,一个map项包括两个数据段key-value
//key:关键字,一个key只能在map中出现一次(重复出现则覆盖)
//map会根据键值自动排序
//map.find(key)
//map.count(key)计算key出现1次
//multimap.count(key) 可出现多次
//multimap.lower_bound(key) 第一个大于等于key的元素,这个函数用来返回要查找关键字的下界(是一个迭代器)
//multimap.upper_bound(key) 第一个大于key的元素,这个函数用来返回要查找关键字的上界(是一个迭代器)
//equal_range()函数返回一个pair,//pair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,//如果这两个迭代器相等的话,则说明map中不出现这个关键字
//multimap可以有一对多的关系,没有[]操作
//二叉树:一个结点最多有两个子结点
//平衡二叉树:左树和右树的高度绝对值不超过1
//1、使用map需包含map类所在的头文件:#include <map> //注意,STL头文件没有扩展名.h
#include<iostream>
#include<string>
#include<map>using namespace std;
int main()
{//2、map的定义map<int, string> map1;//3、map四种插入方法map1.insert(map<int,string>::value_type(10,"aaaa"));map1.insert(pair<int, string>(20, "bbbb"));map1.insert(make_pair(30, "cccc"));map1[40] = "dddd";map1[40] = "eeee";  //覆盖ddddfor (int i = 10; i < 50; i += 10){cout << map1[i]<< endl;}//4、迭代输出。若为rbegin()和rend()为反向迭代for (map<int, string> ::iterator it = map1.begin(); it != map1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << map1.size()<<endl;//5、利用find(key)和count(key)来发现一个键是否存在//map1.find(key)  返回一个迭代器指向键值为key的元素,如果没有找到,返回指向map尾部的迭代器//cout << map1.count(40) << endl;map<int, string> ::iterator find_it = map1.find(40);cout << find_it->first << ":" << find_it->second << endl;//6、元素删除:先查找元素,map<int ,string>::iterator it=map1.find(key); 找到之后map1.erase(it);//erase() 的返回值为0或者1.若为1表示删除成功,否则删除失败map<int, string> ::iterator del_it = map1.find(10);map1.erase(del_it);//7、map中的swap函数,交换的是两个容器而不是一个容器中的元素交换map<int, int> m1, m2,m3;m1.insert(pair<int, int>(1, 1));m1.insert(pair<int, int>(2, 2));m1.insert(pair<int, int>(3, 3));m2.insert(pair<int, int>(11, 11));m2.insert(pair<int, int>(12, 12));m2.insert(pair<int, int>(13, 13));m3.insert(pair<int, int>(21, 21));m3.insert(pair<int, int>(22, 22));m3.insert(pair<int, int>(23, 23));cout << "m1:" << endl;for (map<int, int> ::iterator it = m1.begin(); it != m1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m2:" << endl;for (map<int, int> ::iterator it = m2.begin(); it != m2.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m3:" << endl;for (map<int, int> ::iterator it = m3.begin(); it != m3.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "-----m1.swap(m2)测试-------" << endl;m1.swap(m2); //深拷贝。用m1.swap(m2)无法换回来cout << "m1:" << endl;for (map<int, int> ::iterator it = m1.begin(); it != m1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m2:" << endl;for (map<int, int> ::iterator it = m2.begin(); it != m2.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "-----swap(m3, m1);测试-------" << endl;swap(m1, m3);cout << "m1:" << endl;for (map<int, int> ::iterator it = m1.begin(); it != m1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << "m3:" << endl;for (map<int, int> ::iterator it = m3.begin(); it != m3.end(); it++){cout << it->first << ":" << it->second << endl;}//8、sort函数,因为map中key按照升序进行排列的,所以不能使用sort函数//9、数据的清空与判空清空map中的数据可以用clear()函数,//10、判定map中是否有数据可以用empty()函数,它返回true则说明是空map/*map<string, string> map2;map2["张三"] = "小三";map2["李四"] = "小四";cout << map2["张三"] << endl;*/cout << "-----------------------multimap分割线-----------------------" << endl;multimap<int, string> multimap1;	multimap1.insert(make_pair(20, "BBB"));multimap1.insert(make_pair(30, "CCC"));multimap1.insert(make_pair(50, "EEE"));multimap1.insert(make_pair(50, "FFF"));multimap1.insert(make_pair(50, "GGG"));multimap1.insert(make_pair(50, "HHH"));multimap1.insert(make_pair(40, "DDD"));multimap1.insert(make_pair(10, "AAA"));cout << "multimap1元素为:" << endl;for (multimap<int, string> ::iterator it = multimap1.begin(); it != multimap1.end(); it++){cout << it->first << ":" << it->second << endl;}cout << multimap1.count(50) << endl;multimap<int, string>::iterator it1 = multimap1.find(50);int count =multimap1.count(50);cout << "count测试" << endl;for (int i = 0; i < count; i++){cout << it1->first << ":" << it1->second << endl;it1++;}multimap<int, string> ::iterator it;multimap<int, string>::iterator begin, end;cout << "lower_bound.upper_bound测试" << endl;begin = multimap1.lower_bound(50);end = multimap1.upper_bound(50);for (it = begin; it != end; ++it){cout << it->first << ":" << it->second << endl;it++;}cout << "equal_range测试" << endl;auto pairTemp=multimap1.equal_range(50);begin = pairTemp.first;end = pairTemp.second;for (it = begin; it != end; ++it){cout << it->first << ":" << it->second << endl;it++;}return 0;
}

运行结果:

 

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

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

相关文章

【功能业务篇】APP获取用户定位、传参经纬度思考

常用的三种定位方式有&#xff1a;基于GPS定位、基于基站地位、基于wifi定位。 1、基于GPS定位&#xff1a; GPS定位需要GPS模块(硬件)的支持,没有GPS模块是无法进行GPS定位的。 GPS定位最大的优点就是其定位精确度高(一般误差在10m内),无网络也能用;缺点就是耗电高、定位慢、室…

cmd运行python程序

先cd到当前目录&#xff0c;然后python XXX.py

mysql 四种存储引擎

前言 数据库存储引擎是数据库底层软件组织&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能&#xff0c;使用不同的存储引擎&#xff0c;还可以 获得特定的功…

Android ADB调试之无线连接设备

Android无线调试 一、数据线连接手机和电脑&#xff08;首次设置需数据线连接&#xff09;&#xff0c;开启开发者模式和USB调试&#xff0c;确保手机和电脑已连接 cmd下执行adb devices 显示上图1&#xff0c;说明已连接 二、华为手机设置 1、开发人员选项 2、USB调试 3、…

【Python实战】使用python计算多种类型到期还款日

一般金融产品的账务测试时&#xff0c;我们会接触到还款方式&#xff0c;到期还款日等概念。 在自动化测试或者脚本使用中&#xff0c;我们需要动态的生成到期还款日去进行账务测试&#xff0c;这篇文章主要介绍了常见的几种到期还款日计算方式。 一、固定期限&#xff08;比如…

Fiddler抓包工具之Filters(过滤器)进行会话过滤

一、设置User Fiters启用 未勾选Use Filters&#xff0c;未启用此功能&#xff1b;已勾选Use Filters&#xff0c;已启用此功能 二、Action设置 Run Filterset now :马上执行过滤&#xff0c;立即生效过滤 Load Filterset&#xff1a; 加载本地过滤文件到fiddler Save Filt…

【pyQT5】Python3+pyQT5开发环境安装与配置

在PyQt中编写UI界面可以直接通过代码来实现&#xff0c;也可以通过Qt Designer来完成。Qt Designer的设计符合MVC的架构&#xff0c;其实现了视图和逻辑的分离&#xff0c;从而实现了开发的便捷。 Qt Designer中的操作方式十分灵活&#xff0c;其通过拖拽的方式放置控件可以随时…

【TensorFlow】TensorFlow是什么?

TensorFlow 是一个开源的、基于 Python 的机器学习框架&#xff0c;它由 Google 开发&#xff0c;并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用&#xff0c;是目前最热门的机器学习框架。 除了Python&#xff0c;TensorFlow 也提供了 C/C、Java、Go、…

【TensorFlow】Win7+Anaconda+python3.6+Tensorflow1.9安装教程

相关链接 官网&#xff1a;https://tensorflow.google.cn/ github&#xff1a;https://github.com/tensorflow/tensorflow 中文社区网&#xff1a;http://www.tensorfly.cn/ 安装说明 平台&#xff1a;windows 7 Anaconda版本&#xff1a;4.6.14 python版本&#xff1a;3.6.…

【Jmeter篇】如何利用Jmeter配置元件计数器、随机变量制造批量数据和变量参数化?

一、计数器 1、线程组-配置元件-计数器 2、功能介绍 starting value&#xff1a;给定计数器的起始值、初始值&#xff0c;第一次迭代时&#xff0c;会把该值赋给计数器 递增(Increment)&#xff1a; 每次迭代后&#xff0c;给计数器增加的值 最大值(Maximum) &#xff1a;…

软件工程经济学习题 答案(不保证对错,找不到答案)

一、资金等值计算 1.某IT企业今年向银行贷款20万元以购置一台设备。若银行贷款利率为10%&#xff0c;规定10年内等额偿还&#xff0c;试求每年的偿还金额。 2.某软件企业向银行贷款200万元&#xff0c;按年利率为8%进行复利计息&#xff0c;试求该企业第5年末连本带利一次偿还银…

Django+Jquery+Ajax+验证码登录案例

1&#xff0c;创建项目test04 2&#xff0c;创建应用app为booktest 3&#xff0c;注册应用booktest 作用让创建的应用运行起来 4&#xff0c;在项目根目录下创建模板templates目录 作用就是存放html文件在项目的settings.py文件中配置模板&#xff0c;如下图&#xff1a;5&…

【数据库】Mysql日期/时间函数实际案例

有一款金融产品&#xff0c;总共24期&#xff0c;每月2日到期还款日&#xff0c;第一个到期还款日为放款日下个月的2日&#xff0c;现在我们知道所有订单的放款时间&#xff0c;现在我们想统计每个订单当前时间是第几期。 举个简单例子&#xff1a;当期日期为2019-11-12&#…

【Jmeter篇】1小时轻松搞定项目接口自动化测试与数据驱动

之前我们的用例数据都是配置在 Jmeter Http 请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开 jmeter 重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f; 其实我们可以将用…

module 'queue' has no attribute 'Queue'解决

import queue q queue.Queue() q.put(a) q.put(b) print(q.get())错误&#xff1a; AttributeError: module queue has no attribute Queue 解决方法&#xff1a; 把程序名命名和包名一样导致错误。命名为queue1.py就ok了

【Python】import自己的模块报错

在实际使用python时&#xff0c;我们会将一些公共的东西写到一些基础模块中&#xff0c;供其他模块去调用&#xff0c;这时会去import自定义的一些基础模块&#xff0c;然后来导入。 自己写好了脚本&#xff0c;然后导入&#xff0c;导入的情况分为以下情况&#xff1a; 1. 运行…

Jmeter生成自动化和性能多维度测试报告(性能指标和监听器图表)

jmeter在命令行下还可以生成多维度的测试报告&#xff0c;里面包含了常用的性能指标和监听器图表。 一、环境要求 1、jmeter3.0版本之后开始支持动态生成测试报表 2、jdk版本1.7以上 3、需要jmx脚本文件 二、生成jtl文件 1、进入bin目录下cd jmeter -n -t C:\jmeter\apach…

【Python】pyinstaller模块打包的exe在windows环境无法使用问题汇总

问题一&#xff1a;解决pyinstaller打包发布后的exe文件打开控制台闪退的问题 pyinstaller打包发布后的exe文件在自己电脑能够正常使用&#xff0c;但是给到别人的电脑时&#xff0c;打开exe文件却发生闪退&#xff0c;看不到具体的原因。 1、定位问题&#xff1a; 1.1.切换到…

Appium+PythonUI自动化测试之uiautomatorviewer和Inspector元素定位

一、uiautomatorviewer uiautomatorviewer是android-sdk自带的一个元素定位工具&#xff0c;非常简单好用&#xff0c;使用uiautomatorviewer&#xff0c;你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。 1、启动uiautomatorviewer.bat&#xff0c;打开sdk安装…

服务器购买和远程连接

1. 申请阿里云服务器 *打开阿里云ECS购买页面&#xff0c;并用淘宝账号登陆&#xff0c;可以按需购买。基础配置的话包月大约60元/月 在部署阶段也可以选择按使用流量付费&#xff0c;只需要32元/月&#xff0c;后续部署成功后进行配置升级 操作系统选择Ubuntu的最新版本 …