C/C++教程

c++ map用法 入门必看 超详细

本文主要是介绍c++ map用法 入门必看 超详细,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、map的作用
可以实现各种类型的映射。可以用数组来类比,都是由下标和值组成,但数组用法很局限,下标不能是负数,而且开数组需要消耗太多的内存,开到10^7就内存超限了。因此,很多时候都用高级的map类或vector类来代替数组。其里面的成员函数为我们写程序提供了很多便利。

2、map的定义
map<下标类型,值类型> 变量名;
如:
int对int型 map<int,int> a;
int对double型 map<int,double> a;
double对int型 map<double,int> a;
还可以是结构体(类)对结构体(类)等,用法如下:

代码:

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法
#include<map>//使用map需要带上这个文件
#include<string>//字符串一般都用这个代替c语言中char数组
#include<vector>
using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,vector,queue时都要使用
struct a//定义结构体a
{
    int x;
    bool operator <(const a c)const
    {
        return x<c.x;
    }
};
struct b//定义结构体b
{
    int y;
};
int main()//主函数
{
    map<int,int> var1;//举例子,int对int,定义
    var1[-5]=3;//-5映射3
    var1[6]=2;//6映射2
    cout<<"int对int用法:"<<endl;
    cout<<"var1[-5]="<<var1[-5]<<endl;
    cout<<"var1[6]="<<var1[6]<<endl;
    cout<<"var1[3]="<<var1[3]<<endl<<endl;//没有赋值,初始都为0
    //
    //int对结构体a
    map<int,a> var2;
    struct a value1,value2;//用结构体定义一个变量value1和一个变量value2
    value1.x=111;
    value2.x=222;//给成员赋值
    var2[3]=value1;
    var2[5]=value2;
    cout<<"int对结构体a的用法"<<endl;
    cout<<"var2[3].x="<<var2[3].x<<endl;
    cout<<"var2[5].x="<<var2[5].x<<endl;
    cout<<"var2[6].x="<<var2[6].x<<endl;//没赋值就是一个原始结构体
    var2[6].x=333;//可以直接修改
    cout<<"修改后"<<endl<<"var2[6].x="<<var2[6].x<<endl<<endl;
    //
    //结构体a对结构体b
    map<a,b> var3;
    a value3;
    b value4;
    value3.x=444;
    value4.y=555;
    var3[value3]=value4;//map的下标是有序的,使用结构体当下标时需要重载运算符
    cout<<"结构体a对结构体b:"<<endl;
    cout<<"var3[value3].y="<<var3[value3].y<<endl;
    value4.y=666;
    cout<<"修改value4.y的值为666后"<<endl<<"var3[value3].y="<<var3[value3].y<<endl;//map映射不是地址映射而是值映射
    value3.x=777;
    cout<<"修改value3.x的值为777后"<<endl<<"var3[value3].y="<<var3[value3].y<<endl<<endl;//map映射不是地址映射而是值映射
    //
    //string对int
    map<string,int> var4;
    string s1("abc"),s2("cba");
    var4[s1]=1;
    var4[s2]=2;
    cout<<"string对int"<<endl;
    cout<<"var4[s1]="<<var4[s1]<<endl;//实际可以理解为"abc"=1;
    cout<<"var4[s2]="<<var4[s2]<<endl;//实际可以理解为"cba"=2
    //
    //map,vector,queue,set联合使用还可以实现一对多,多对一,映射队列等多种用法,讲解还需要其它很多知识,下次再一一详解啦
}

运行结果:

int对int用法:
var1[-5]=3
var1[6]=2
var1[3]=0

int对结构体a的用法
var2[3].x=111
var2[5].x=222
var2[6].x=0
修改后
var2[6].x=333

结构体a对结构体b:
var3[value3].y=555
修改value4.y的值为666后
var3[value3].y=555
修改value3.x的值为777后
var3[value3].y=0

string对int
var4[s1]=1
var4[s2]=2

3、map的常用的成员函数

begin() //返回指向map头部的迭代器,遍历的时候经常需要用到
end() //返回指向map尾部后一位的迭代器
rebegin() //返回指向map头部的迭代器
rend() //返回指向map尾部后一位的迭代器
size() //返回map中元素的个数
erase() //删除一个元素
find() //查找一个元素
empty() //查看是否为空

map的成员函数常用的就几个,比较好上手

4、map遍历
需要使用迭代器,用法如下:

代码:

#include<iostream>
#include<map>
using namespace std;
int main()
{
    map<int,int> a;
    a[1]=2;
    a[3]=4;
    a[5]=6;
    a[9]=10;//a[7]和a[9]是乱序的遍历时map会自动排序
    a[7]=8;
    map<int,int>::iterator it;//使用迭代器
    for(it=a.begin();it!=a.end();it++)
    {
        cout<<"a["<<it->first<<"]="<<it->second<<endl;
    }
    //it->first是下标,it->second是值
}

运行结果:

a[1]=2
a[3]=4
a[5]=6
a[7]=8
a[9]=10

刚接触肯定会觉得难,多些做题多些用,熟悉了就容易了,兄弟萌,加油!!!

文章尚有不足,欢迎大牛们指正

感谢观看,点个赞吧

这篇关于c++ map用法 入门必看 超详细的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!