c++ map容器-插入的四种方法

一、map容器的四种插入方法:

创建map对象:

map<int, int> m1;

pair对组的认识:

如果对pair对组不太了解,可以先看看这位博主对pair对组的相关介绍

【C++】什么是pair(对组)、pair(对组)概念

第一种:

//通过使用pair对组构造函数 并使用匿名函数对将pair对组的数据赋给map对象

//系统会自动回收匿名对象 当匿名对象没有进行绑定操作,会自动进行析构。

//在此之前会将其数据赋给m1 

m1.insert(pair<int, int>(1, 4));

第二种:

 //使用paird对组的另一种构造函数  使用make_pair会进行自动识别输入数据的类型

 m1.insert(make_pair(3, 0));

第三种:

//map作用域下的 value _类型()  少用,但可以用来装

m1.insert(map<int, int>::value_type(2, 7));

第四种:

//[ ]方式 注意:此种方式 索引不是数组下标 而是key值  即  [key值]

m1[4] = 5;

进行输出的操作:

  //当然你也可以使用普通的迭代器 不需要加const_ 直接在::后面加上iterator
void printMap(const map<int, int>& m)//通过引用方式读取 来节约空间
{
   
    for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
    {
        cout << "key值= " << it->first << " value值= " <<it->second<< endl;
    }
    cout << endl;
}

     //  为什么使用const_iterator  防止通过迭代器更改数据
    //    请看以下案例
   //   for (deque<int>::const_iterator it = d.begin(); it < d.end(); it++) 
   //    为了不改变输出的数据 使用 const 
    //    {
    //        *it = 100;  //无法再更改数据 
    //        cout << *it << " ";
    //    }
    //    cout<<endl;

四种输出结果:

第四种的注意事项:

 1.若打印输出一个未定义的key,会输出0,并会创建此key,并赋予其value值为0

未定义key 5  但仍会返回 0 创建一个key 为 5,value 为 0 的值

 cout << "m1[5]的值为:"<<m1[5] << endl;

  2.用[ ]方式会可以替换旧值.非常方便

  //更改key下的value值

  m1[4] = 100;

其运行结果

二、完整代码:

#include<iostream>
using namespace std;
#include<map>
void printMap(const map<int, int>& m)
{
    for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
    {
        cout << "key值= " << it->first << " value值= " <<it->second<< endl;
    }
    cout << endl;
}
void test01()
{
    map<int, int> m1;
    //插入
    //第一种:
    m1.insert(pair<int, int>(1, 4));
    //第二种:
    m1.insert(make_pair(3, 0));//pair 的 独特 初始化 
    //第三种:
    m1.insert(map<int, int>::value_type(2, 7));//map作用域下的值 类型() 更适合装逼
    //第四种:
    m1[4] = 5;//注意:此种方式 索引不是数组下标 而是key值  
    printMap(m1);
    cout << "m1[5]的值为:"<<m1[5] << endl;//未给key 5 赋值 但仍会返回 0 创建一个key 为 5,value 为 0 的值
    printMap(m1);
    //更改key下的value值
    m1[4] = 100;
    cout << "更改key为4下的value值为100" << endl;
    printMap(m1);
}
int main()
{
test01();
system("pause");
return 0;
}

三、运行结果:

四、总结:

 [ ]方式的好处:insert的方式不会替换旧值.用[ ]方式才会替换旧值.非常方便。

用第四种方式 打印输出若你key值填错,也会创建一个value为0的值,并进行返回。

你可能会想:那可以用 if(m1[i] =0) {m1.erase(i);} 进行将填错的删除(如erase(4),则删除key为4的数据)

确实可以,但得注意原本数据中的value值中是否就有0。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小苏先生.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值