map容器/multimap容器

news2024/9/21 4:26:58

 

目录

1.map基本概念

简介

本质

优点

map和multimap区别

2.map构造和赋值

功能描述:

函数原型

3.map大小和交换

功能描述

函数原型

4 map插入和删除

功能描述

函数原型

5. map查找和统计

功能描述

函数原型

6 map容器排序

学习目标

主要技术点


1.map基本概念

简介

map中所有元素都是pair
pair中第一个元素为key (键值),起到索引作用,第二个元素为value(实值)

所有元素都会根据元素的键值自动排序

本质

map/multimap属于关联式容器,底层结构是用二叉树实现。

优点

可以根据key值快速找到value值

map和multimap区别

map不允许容器中有重复key值元素.

multimap允许容器中有重复key值元素
 

2.map构造和赋值

功能描述:

对map容器进行构造和赋值操作

函数原型

构造

map<T1,T2> mp;            /map默认构造函数:
map(const map &mp );     //拷贝构造函数

 

赋值

map& operator=( const map &mp);//重载等号操作符

 

代码 

#include <iostream>
using namespace std;
#include <map>
//map容器构造和赋值

void printMap(map<int,int>&m)
{
	for(map<int,int>::iterator it = m.begin();it != m.end();it++)
	{
		cout << "key = "<<(*it).first <<" value = " <<it->second << endl;
	}
	cout<<endl;
} 
void test01()
{
	map<int,int>m;
	m.insert(pair<int,int>(1,10));
	m.insert(pair<int,int>(3,30));
	m.insert(pair<int,int>(2,20));
	m.insert(pair<int,int>(4,40));
	
	printMap(m);
	
	//拷贝构造
    map<int,int>m2(m); 
    printMap(m2);
    
    //赋值
	map<int,int>m3;
	m3 = m2;
	printMap(m3); 
} 
int main()
{
	test01();
	system("pause");
	
	return 0;
}

结果

 

3.map大小和交换

功能描述

统计map容器大小以及交换map容器

函数原型

size();                     //返回容器中元素数目

empty();                  //判断容器是否为空

swap(st);                //交换俩个集合容器

代码

#include <iostream>
using namespace std;
#include <map>
void printMap(map<int,int>&m)
{
	for(map<int,int>::iterator it = m.begin();it != m.end();it++)
	{
		cout << "key = "<<(*it).first <<" value = " <<it->second << endl;
	}
	cout<<endl;
} 
//map容器大小和交换

//大小
void test01()
{
	map<int,int>m;
	m.insert(pair<int,int>(1,10));
	m.insert(pair<int,int>(3,30));
	m.insert(pair<int,int>(2,20));
    
	if(m.empty())
	{
		cout<<"m为空"<<endl; 
	} 
	else 
	{
		cout<<"m不为空"<<endl; 
		cout<<"m大小为:"<<m.size()<< endl; 
	}
} 
void test02()
{
	map<int,int>m;
	m.insert(pair<int,int>(1,10));
	m.insert(pair<int,int>(3,30));
	m.insert(pair<int,int>(2,20));
	
	map<int,int>m2;
	m2.insert(pair<int,int>(4,100));
	m2.insert(pair<int,int>(5,200));
	m2.insert(pair<int,int>(6,300));
	
	cout<< "交换前:" <<endl;
	printMap(m);
	printMap(m2);
	
	//交换
	m.swap(m2);
	cout<< "交换后:" <<endl;
	printMap(m);
	printMap(m2);
	
	 
}
int main()
{
	test01();
	test02();
} 

结果

 

4 map插入和删除

功能描述

 map容器进行插入数据和删除数据

函数原型

insert(elem);          //在容器中插入元素。
clear();                  //清除所有元素
erase( pos);          //删除pos迭代器所指的元素,返回下一个元素的迭代器。
erase(beg,end);   //删除区间[beg,end)的所有元素,返回下一个元素的迭代器。
erase( key ) ;       //删除容器中值为key的元素。

 

代码

#include <iostream>
using namespace std;
#include <map>
//map容器插入和删除 

void printMap(map<int,int>&m)
{
	for(map<int,int>::iterator it = m.begin();it != m.end();it++)
	{
		cout << "key = "<<(*it).first <<" value = " <<it->second << endl;
	}
	cout<<endl;
} 
void test01()
{
	map<int,int>m;
	
	//插入
	//第一种 
	m.insert(pair<int,int>(1,10));

    //第二种
	m.insert(make_pair(2,20));
	
	//第三种
	m.insert(map<int,int>::value_type(3,30));
	
	//第四种
	m[4] = 40; 
	//[]不建议插数 
//	cout<<m[5]<<endl;
	printMap(m);
	
	//删除
	m.erase(m.begin());
	printMap(m);
	
	//删除重载版本 
	m.erase(3);
	printMap(m);
	
	//删除区间 
	m.erase(m.begin(),m.end());
	printMap(m);	
}
int main()
{
	test01();
	system("pause");
	
	return 0;
}

结果

 

5. map查找和统计

功能描述

对map容器进行查找数据以及统计数据

函数原型

find(key);       //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);     //统计key的元素个数

代码 

#include <iostream>
using namespace std;
#include <map>
//map容器查找和统计 

void printMap(map<int,int>&m)
{
	for(map<int,int>::iterator it = m.begin();it != m.end();it++)
	{
		cout << "key = "<<(*it).first <<" value = " <<it->second << endl;
	}
	cout<<endl;
} 
void test01()
{
	map<int,int>m;
	m.insert(pair<int,int>(1,10));
	m.insert(pair<int,int>(3,30));
	m.insert(pair<int,int>(2,20));
	m.insert(pair<int,int>(4,40));
	
	//查找
	map<int,int>::iterator pos = m.find(3);
	
	if(pos != m.end()) 
	{
		cout<<"查找了元素key = "<<pos->first<<" value = "<<pos->second <<endl;
	}
	else
	{
		cout<< "未找到元素" <<endl;
	} 
	
	//统计
	//map不允许重复的key元素,count结果要么是0要么1
	//multimap的count统计可能大于1 
	int num = m.count(3);
	cout<< "num = "<<num<<endl; 

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

结果

 


6 map容器排序


学习目标

 map容器默认排序规则为按照key值进行从小到大排序,掌掘如何改变排序规则


主要技术点

利用仿函数,可以改变排序规则

 

代码

#include <iostream>
using namespace std;
#include <map>
//map排序
 
class MyCompare
{
public:
	bool operator()(int v1,int v2)
	{
		//降序
		return v1> v2 ;
	}
}; 
void printMap(map<int,int,MyCompare>&m)
{
	for(map<int,int>::iterator it = m.begin();it != m.end();it++)
	{
		cout << "key = "<<(*it).first <<" value = " <<it->second << endl;
	}
	cout<<endl;
} 

void test01()
{
	map<int,int,MyCompare>m;
	
	m.insert(pair<int,int>(1,10));
	m.insert(pair<int,int>(3,30));
	m.insert(pair<int,int>(2,20));
	m.insert(pair<int,int>(4,40));
	m.insert(pair<int,int>(5,50));	
	printMap(m); 

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

结果

 

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

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

相关文章

web入门-爆破

文章目录web21web22web23python脚本php脚本web24web25web26web27web28web21 进入网站&#xff0c;提示要登陆&#xff0c;妥爆破 抓包 注意到最下行的base64编码 发现就是刚刚输入的账号密码 因此这里就是要选择爆破的地方了 发给inruder&#xff0c;添加爆破位 载入题目给…

【坚持不懈的每日一题——力扣篇】1774. 最接近目标价格的甜点成本(中等)-- dfs / dp

GitHub同步更新&#xff08;已分类&#xff09;&#xff1a;Data_Structure_And_Algorithm-Review 公众号&#xff1a;URLeisure 的复习仓库 公众号二维码见文末 以下是本篇文章正文内容&#xff0c;下面案例可供参考。 一、题目描述 力扣今天推的每日一题是道中等题 。 示例…

qt人员管理模块(模块化程序)功能块复制直接使用不冲突

一、前言 qt对人员管理部分个人总结的模块化程序&#xff0c;直接按照步骤复制粘贴程序&#xff0c;直接实现人员管理功能&#xff0c;无需花费脑筋在理清各个思路&#xff0c;适合快速编写组装程序 二、环境 windows qt5.7 sqlite3 三、正文 思来想去大半天&#xff0c;…

JS快速入门

一、JS介绍 JavaScript &#xff08;简称JS&#xff09;&#xff0c;是一门跨平台、面向对象的脚本语言&#xff08;弱类型语言&#xff09;&#xff0c;而Java语言也是跨平台的、面向对象的语言&#xff0c;只不过Java是编译语言&#xff0c;是需要编译成字节码文件才能运行的…

自定义RBAC(1)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 在对Spring Security稍做了解之后&#xff0c;可以知道&#xff0c;Spring Security其实只是一个实现认证授权的框架&#xff0c;封装了很多实现细节。但也有一些…

【Linux网络编程】服务端编程初体验

文章目录前言服务端是啥、有什么特点核心函数socket的简介服务器编程客户端代码The End前言 在上节课(Linux网络编程初体验)中我们实现了连接bilibili的功能&#xff0c;并获取其html源码 如图所示. 今天我们要自己编写个服务端来服务我们的客户端 提示&#xff1a;以下是本篇…

SGI STL 二级空间配置源码刨析

文章目录内存分配第二级配置器空闲链表的设计内存申请代码内存释放代码注意内存分配 当我们new一个对象时&#xff0c;实际做了两件事情&#xff1a; 使用malloc申请了一块内存。执行构造函数。 在SGI中&#xff0c;这两步独立出了两个函数&#xff1a;allocate申请内存&…

年产20吨鸡枞菌产品的生产工艺设计(lunwen+课题登记表+cad图纸)

目录 摘 要 1 Abstract 2 一、设计任务和内容 4 1.1 设计题目 4 1.2 设计原始数据 4 二、设计说明 5 2.1 全厂总平面布置 5 2.1.1 原料厂及堆场 5 2.1.2 生产区 5 2.1.3 厂前区 6 2.1.4 动力区 6 2.1.5 辅助车间 6 2.1.6 仓库区 6 2.2 三废的处理及回收 6 2.3 车间布置说明 6 三…

Request和Response基础知识入门

文章目录1&#xff0c;Request和Response的概述2&#xff0c;Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式2.3 IDEA快速创建Servlet2.4 请求参数中文乱码问题2.4.1 POST请…

【Unity3D】绘制物体表面三角形网格

1 仅绘制三角形网格 1&#xff09;创建游戏对象 创建一个空对象&#xff0c;重命名为 Grid&#xff0c;并在其下添加需要绘制网格的对象&#xff0c;如下&#xff1a; 场景显示如下&#xff1a; 2&#xff09;添加脚本组件 GridController.cs using System; using UnityEngin…

JavaWeb_第4章_RequestResponse

JavaWeb_第4章_Request&Response 文章目录JavaWeb_第4章_Request&Response1&#xff0c;Request和Response的概述2&#xff0c;Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数…

【ceph】分布式存储ceph

1 块存储&#xff0c;文件存储&#xff0c;对象存储 1.1 简介 文件存储&#xff1a;分层次存储&#xff0c;文件存储在文件夹中&#xff1b;访问文件时系统需要知道文件所在的路径。 举例&#xff1a;企业部门之间运用网络存储器&#xff08;NAS&#xff09;进行文件共享。 …

把握出租车行驶的数据脉搏 :出租车轨迹数据给你答案!

城市化带来的道路拥堵、出行耗时长等交通问题给交管部门带来了巨大的挑战。 ▼ 通过安装在出租车上的GPS设备&#xff0c;可以采集到大量的轨迹数据&#xff0c;从而帮助我们分析人们出行信息&#xff0c;达到优化交通的目的。 最近我们被客户要求撰写关于出租车行驶的研究报…

一次性分清zip、gzip、bzip2、tar命令

文章目录归类zip与unzip命令tar命令使用方式zipunzipgzipgunzipbzip2bunzip2tar归类 我们把这几个命令归类为几种能力&#xff0c;一个是解压缩能力一个是打拆包能力。 我这里打包的意思是不使用压缩算法对文件进行压缩&#xff0c;只是简单的把多个文件归档为一个文件。而拆包…

Qt OpenGL(二十五)——Qt OpenGL 核心模式-Qt封装的函数实现彩色三角形

Qt OpenGL(二十五)——Qt OpenGL 核心模式-Qt封装的函数实现彩色三角形 上一篇文章我们绘制了彩色的三角形,接下来其实就应该是让这个三角形旋转起来了,但是,旋转起来之前,还是想通过Qt自己的封装类实现彩色的三角形,并且让他旋转起来。 这才我(冯一川)是写这个系列…

编程之美4 Nim游戏

Tag&#xff1a;贪心&#xff1b;动态规划 题目 N块石头排成一行&#xff0c;每块石头有各自固定的位置。两个玩家依次取石头&#xff0c;每个玩家每次可以取其中任意一块石头&#xff0c;或者相邻的两块石头&#xff0c;石头在游戏过程中不能移位&#xff08;即编号不会改变…

在ASF中使用On Demand生产DEM等产品时使用不同参考DEM的区别

在ASF中使用On Dmand生产DEM等产品时使用不同参考DEM 主要有两种DEM&#xff0c;分别是SRTM和COP-DEM&#xff08;GLO-30&#xff09; 当我们添加Dmand进程之后&#xff0c;点击On Demand Queue 然后进入On Demand界面&#xff08;如下图所示&#xff09; 在Processing Op…

MySQL主从复制介绍及实操演示

1. 基本概念 MySQL主从复制的主要效果简单来说是将两个单独的数据库服务器关联起来&#xff0c;对于主机&#xff08;Master&#xff09;以及从机&#xff08;Slave&#xff09;&#xff0c;从机的数据会伴随着主机数据的变化而同步 2. 主从复制作用 可以解决单个MySQL数据库…

leetcode 63. 不同路径 II

文章目录题目思考代码和注释总结题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑…

Android WorkManager使用介绍

一、引言 WorkManager 是google提供的异步执行任务的管理框架&#xff0c;是 Android Jetpack 的一部分&#xff0c;会根据手机的API版本和应用程序的状态来选择适当的方式执行任务。   在后台执行任务的需求是非常常见的&#xff0c;Android也提供了多种解决方案&#xff0c…