map/multimap容器

news2024/12/30 2:58:14

一、 map基本概念

简介:

map中所有元素都是pair

pair中第一个元素为key(键值),起到索引惟用,第二个元素为value(实值)

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

本质:

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

优点:

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

map和multimap区别:

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

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

二、 map构造和赋值

函数原型:

构造:

map<T1,T2> mp; //map默认构造函数:

map(const map &mp); //拷贝构造函数

赋值:

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

#include<iostream>
using namespace std;
#include<map>

void print(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 test()
{
        map<int, int> m;
        m.insert(pair<int, int>(1, 10));
        m.insert(pair<int, int>(2, 20));
        m.insert(pair<int, int>(3, 30));
        m.insert(pair<int, int>(4, 40));

        print(m);

        map<int, int> m1(m);
        print(m1);


        map<int, int>m2;
        m2 = m;
        print(m2);
}


int main()
{
        test();
        return 0;
}

三、map大小和交换

函数原型:

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

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

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

#include<iostream>
using namespace std;
#include<map>

void print(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 test()
{
        map<int, int> m;
        m.insert(pair<int, int>(1, 10));
        m.insert(pair<int, int>(2, 20));
        m.insert(pair<int, int>(3, 30));
        m.insert(pair<int, int>(4, 40));

        print(m);

        if (m.empty())
        {
                cout << "m为空" << endl;
        }
        else
        {
                cout << "m不为空" << endl;
                cout << "m大小为:" << m.size() << endl;//4
        }


        map<int, int> m2;
        m2.insert(pair<int, int>(5, 100));
        m2.insert(pair<int, int>(6, 200));
        m2.insert(pair<int, int>(7, 300));
        m2.insert(pair<int, int>(8, 400));

        cout << "交换前:" << endl;
        print(m);
        print(m2);

        cout << "交换后:" << endl;
        m.swap(m2);
        print(m);
        print(m2);
}




int main()
{
        test();
        return 0;
}

四、 map插入和删除

函数原型:

insert(elem); //在容器中插入元素。

clear(); //清除所有元素

erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器

erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。

erase(key); //删除容器中值为key的元素

 

#include<iostream>
using namespace std;
#include<map>

void print(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 test()
{
        map<int, int> m;
        //第一种
        m.insert(pair<int, int>(1, 10));
        print(m);


        //第二种
        m.insert(make_pair(2, 20));
        print(m);

        m.erase(m.begin());
        print(m);

        m.erase(1);
        print(m);


        m.erase(m.begin(), m.end());
        print(m);


        m.clear();
        print(m);
}




int main()
{
        test();
        return 0;
}

五、 map查找和统计

函数原型:

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

count(key); //统计key的元素个数

#include<iostream>
using namespace std;
#include<map>

void test()
{
        map<int, int>m;

        m.insert(make_pair(1, 10));
        m.insert(make_pair(2, 20));
        m.insert(make_pair(3, 30));
        m.insert(make_pair(4, 40));

        map<int, int>::iterator pos = m.find(4);
        if (pos != m.end())
        {
                cout << "找到元素 key= " << pos->first << "value=" << pos->second << endl;
        }
        else
        {
                cout << "没有找到!" << endl;
        }

        int num = m.count(4);
        cout << "num=" << num << endl;

}

int main()
{
        test();
        return 0;
}

六、 map容器排序

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

#include<iostream>
using namespace std;
#include<map>


class compare
{
public:
        bool operator()(const int a,const int b)const
        {
            //降序
                return a > b;
        }
};


void test()
{
        map<int, int,compare>m;

        m.insert(make_pair(1, 10));
        m.insert(make_pair(5, 50));
        m.insert(make_pair(4, 40));
        m.insert(make_pair(6, 60));
        m.insert(make_pair(2, 20));
        m.insert(make_pair(3, 30));

        for (map<int, int,compare>::iterator it = m.begin(); it != m.end(); it++)
        {
                cout << " key= " << (*it).first << " value= " << it->second << endl;
        }
}

int main()
{
        test();
        return 0;
}

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

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

相关文章

欧拉系统离线安装界面ukui

1、官网下载安装镜像iso后&#xff0c;默认没有gui openEuler | 开源社区 | openEuler社区官网openEuler是一个开源、免费的 Linux 发行版平台&#xff0c;将通过开放的社区形式与全球的开发者共同构建一个开放、多元和架构包容的软件生态体系。同时&#xff0c;openEuler 也是…

数据结构与算法|算法总结|动态规划篇之子序列、子数组问题

首先我们要明确以下两个问题&#xff1a; 子序列&#xff1a;子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 子数组&#xff1a;子数组是数…

HTTP协议基础知识【后端 4】

HTTP协议基础知识 HTTP&#xff08;Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最为广泛的一种网络协议&#xff0c;它定义了客户端&#xff08;如浏览器&#xff09;与服务器之间数据传输的格式和规则。无论是浏览网页、在线购物还是使…

常见漏洞扫描工具!

AWVS 下载链接&#xff1a; 链接: https://pan.baidu.com/s/1rFq9iMV8oluumyylA22MFg?pwdmyc2 提取码: myc2 打开awvs安装⼯具&#xff0c;一路默认&#xff0c;不要修改文件安装路径&#xff0c;不然会失败&#xff1b; email和password是之后登录服务的账号密码&#xf…

算法日记day 34(动归之使用最小花费爬楼梯|不同路径2|整数拆分|不同的二叉搜索树)

一、使用最小花费爬楼梯 题目&#xff1a; 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返…

工业设备数据采集方案的设计实施与应用-天拓四方

随着工业4.0时代的来临&#xff0c;工业设备数据采集成为了提升生产效率、优化能源管理、实现智能化决策的关键环节。本文将围绕工业设备数据采集的重要性、方案设计实施以及TDE工业网关的应用实践展开探讨&#xff0c;以期为相关企业提供一种清晰、专业且实操性强的数据采集方…

Navicat Premium使用

文章目录 Navicat Premium 16的使用连接MySQL建立数据库并构建表导入数据 Navicat Premium 16是一款功能强大的数据库管理工具&#xff0c;它允许用户从单一应用程序中同时连接多种数据库&#xff0c;提供了极其便捷和高效的管理和开发环境&#xff0c;对于 MySQL 用户来说&…

leetcode198_打家劫舍

思路 动态规划 func rob(nums []int) int {if len(nums) < 2 {return nums[0]}// dp[i] 表示到第i家为止&#xff0c;小偷能够偷窃到的最高金额dp : make([]int, len(nums))dp[0] nums[0]dp[1] max(nums[0], nums[1])for i:2; i<len(nums); i {if nums[i] dp[i-2] &…

制造业BOM管理难点分析 三品PDM系统BOM管理解决方案详情

在当今竞争激烈的市场中&#xff0c;制造企业面临着产品多样化、个性化需求和快速交付的压力。BOM物料清单作为产品数据管理的核心&#xff0c;其准确性和效率直接影响到企业的竞争力。然而&#xff0c;BOM管理在制造企业中往往面临诸多挑战。但是PDM系统的出现让BOM管理变得不…

VisionPro二次开发学习笔记1-创建基于QuickBuild的C#应用程序

创建基于QuickBuild的C#应用程序 使用的QuickBuild应用程序位于&#xff05;VPRO_ROOT&#xff05;/ Samples / Programming / QuickBuild / advancedAppOne.vpp中。在继续之前&#xff0c;可以在QuickBuild中运行该应用程序。 QuickBuild应用程序使用PatMax查找支架的“耳朵…

SSH 和 Telnet 之间的区别

SSH 和 Telnet是帮助用户与远程系统建立连接的两种通信协议&#xff0c;这些通信协议决定了数据如何在网络上的不同设备之间传输&#xff0c;这些设备通常需要通过各种物理和数字环境进行传输&#xff0c;网络协议的主要目标是通信、网络管理和安全。 Telnet Telnet是一种较旧…

如果您的照片从设备中消失请无需惊慌,几个安卓照片恢复工具可以试试

新的手机数据恢复应用程序定期推出&#xff0c;这个市场竞争非常激烈。因此&#xff0c;选择最好的 Android 手机照片恢复应用程序可能是最棘手的部分。这就是为什么我们准备了一份概述&#xff0c;介绍目前被认为是恢复丢失照片最有效的应用程序。 几个安卓照片恢复工具 让我…

Cocos通过Electron打包web应用后,在触屏一体机设备触摸滑动无效问题解决

Cocos通过Electron打包web应用后&#xff0c;在触屏一体机设备触摸滑动无效问题解决 已经很晚了&#xff0c;刚刚解决这个问题&#xff0c;还是想记录一下&#xff0c;因为刚刚接触 cocos 没多久&#xff0c;这个问题困扰了我很久。 背景 接手了一个答题小游戏&#xff0c;由于…

直线度测量仪测量不准时如何快速自检恢复?

直线度测量仪应用于圆形产品的直线度及外径尺寸检测&#xff0c;既有应用于生产线中的在线测量仪又有离线直线度测量仪&#xff0c;但不管哪种设备&#xff0c;都是光学检测设备&#xff0c;也都具备光学设备的特性。 在测量仪的长期使用过程中&#xff0c;难免会遇到测量不准…

2015款到18款奔驰GLC升级为2021款的HU6主机后,实现了触摸屏人机交互和Carplay功能

奔驰GLC是北京奔驰生产的一款中型SUV。有车主将2015款奔驰GLC升级为2021款的HU6主机后&#xff0c;实现了触摸屏人机交互和Carplay功能。该车主分享了使用体验&#xff1a; • Carplay功能&#xff1a;可以直接在车机大屏幕上显示导航、音乐和电话信息&#xff0c;让用户在开车…

中国信息学奥赛专用系统之----NOI Linux 2.0系统安装教程

1、下载NOI Linux 2.0系统&#xff0c;下载地址&#xff1a; https://noiresources.ccf.org.cn/ubuntu-noi-v2.0.iso 2、新建虚拟机 3、开机安装系统 下载插件&#xff0c;可能需要10分钟以上。 5、进系统看看 OK,NOI Linux 2.0系统安装完毕&#xff01;

MySQL面试题全解析:准备面试所需的关键知识点和实战经验

MySQL有哪几种数据存储引擎&#xff1f;有什么区别&#xff1f; MySQL支持多种数据存储引擎&#xff0c;其中最常见的是MyISAM和InnoDB引擎。可以通过使用"show engines"命令查看MySQL支持的存储引擎。 存储方式&#xff1a;MyISAM引擎将数据和索引分别存储在两个不…

手机怎么远程控制电脑屏幕?手机远程控制电脑方法分享

手机与电脑之间的互联互通变得越来越便捷。 无论是工作还是学习&#xff0c;有时我们需要在手机上远程控制电脑屏幕&#xff0c;以完成一些复杂的操作或查看电脑上的文件。 本文将详细介绍几种实用的手机远程控制电脑屏幕的方法&#xff0c;帮助读者轻松实现这一目标。 一、使…

美容院节假日可以做哪些营销活动?博弈美业系统源码|美容院管理系统

美容院在节假日期间开展各种类型的营销活动是必不可少的&#xff0c;可以吸引用户消费或充值、开发新客户、提高客户忠诚度。 在举办各类活动时&#xff0c;可针对不同的用户群体采取不同的活动策略&#xff0c;下面给大家简单列举一些活动策略&#xff0c;门店可在此基础上根…

【Nessus破解及20220412插件】漏洞扫描工具之一,windows版本安装

一、双击安装程序 安装路径默认即可&#xff0c;记住安装的路径在哪里。 一般默认路径都是——C:\Program Files\Tenable\Nessus 等待初始化加载完成。 选择第四个。 选择Tenable.sc&#xff0c;继续下一步。 填写username和密码继续。 安装完是以下界面&#xff0c;目前还不能…