C++ :Map

2 篇文章 0 订阅

1.特别的在映射中例如:

map<int ,char>M;
M[1]=’a’;

表示的是1->a;而不能代表a->1即可以输出M[1]而不能输出M[‘a’];
即每次进行映射操作中括号的内容被保存到该映射中
1.还有的就是若

M[1]=’a’;
M[1]=’b’;
M[1]=’c’;

此时M[1]的值是’c’因为相当与又重新赋值了两次
即每个值只能映射给一个值
2.映射在存储的中是有顺序的;按保存元素的字典序排序如:

m[2]=‘a’;
m[3]=‘b’;
m[1]=‘c’;
m[5]=‘d’;
m[4]=‘e’;

map<int ,char>::iterator it1,it2,it3;
for(it1=m.begin();it1!=m.end();it1++){
cout<first<<" "<second;
cout<<endl;
}

在这里插入图片描述
3.可以通过这种操作:

map<char,int> first;
first=std::map<char,int>();

把一个映射“清零”。

Map.begin、Map.end都是该映射的迭代器
如该段程序:

map<char,int> mymap;

mymap[‘b’] = 100;
mymap[‘a’] = 200;
mymap[‘c’] = 300;

for (map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
cout << it->first << " " << it->second << ‘\n’;

Output:
a => 200
b => 100
c => 300
这说明当迭代器指向map类型的值的时候该迭代器是有两个属性的第一个的值就是定义的时候该类型的值第个也是

Map.clear()是执行擦除功能将该映射中的所有内容全部擦除

Map.count(k)因为映射是一一对应的关系所以若能搜查到该映射则返回1否则返回0
还要注意的是k应该是该映射保存过的内容即在产生映射关系中是在中括号里面的

Map.empty()判断该映射是否为空若为空返回true否则返回false

Map.equal_range(k)主要的作用是建立双向迭代器其中k是该映射所保存过的内容
如:

map<int ,char> m;
m[1]=‘a’;
m[2]=‘b’;
m[3]=‘c’;
pair<map<int ,char >::iterator,map<int ,char>::iterator >t;
t=m.equal_range(1);
cout<<t.first->first<<" “<<t.first->second<<endl;
cout<<t.second->first<<” "<<t.second->second<<endl;
在这里插入图片描述


Map.erase()经过了函数重载有几种使用方法
Map.erase(it) it是指向该映射中某一元素的迭代器,该操作会擦除该元素的映射关系
Map.erase(k) k是该映射中的一个元素,该操作会删除该元素的映射关系
Map.erase(it1,it2) it1、it2都是指向映射中元素的迭代器
map<int ,char> m;
m[1]=‘a’;
m[2]=‘b’;
m[3]=‘c’;
m[4]=‘d’;
m[5]=‘e’;
map<int ,char>::iterator it1,it2,it3;
it1=m.find(1);
it2=m.find(4);
m.erase(it1,it2);
for(it3=m.begin();it3!=m.end();it3++){
cout<first<<" "<second;
cout<<endl;

}
在这里插入图片描述

表示会删除it1到it2之间的元素包括it1指向的元素不包括it2指向的元素

Map.find(k)返回该元素的迭代器

Map.insert()经过了函数重载有几种使用方法

  1. map<int ,char >m;
    m.insert(pair<int,char>(1,’a’));
    相当于增加了一个映射关系,即相当于做了m[1]=’a’的操作
  2. map<int,char>m;
    m.insert(it,pair<int,char>(1,’a’))表示在it指代的位置插入一个映射这种操作意义并不大因为在插入后还会按元素的字典序进行排序,这种做法往往是在知道其中的排列顺序时在最适合位置进行插入,也就是未来增加插入效率
  3. map<int ,char> m,n;
    m[2]=‘a’;
    m[3]=‘b’;
    m[1]=‘c’;
    m[5]=‘d’;
    m[4]=‘e’;
    map<int ,char>::iterator it1,it2,it3;
    it1=m.find(2);
    it2=m.find(4);
    n.insert(it1,it2);
    for(it3=n.begin();it3!=n.end();it3++){
    cout<first<<" "<second;
    cout<<endl;}
    在这里插入图片描述
    表示其中可以是两个指向另一个映射的迭代器
    插入的元素是it1和it2之间的元素包括it1指向的元素不包括it2指向的元素

    Map.lower_bound()、Map.upper_bound()都返回迭代器
    如:map<int ,char >m; map<int,char>::iterator itlow,itup;
    m[2]=‘a’;
    m[3]=‘b’;
    m[1]=‘c’;
    m[5]=‘d’;
    m[4]=‘e’;
    itlow=m.lower_bound();itup=m.upper_bound();
    m.erase(itlow,itup); //则表示擦除itlow指向的位置元素(包括itlow指向的元素)到 itup指向的元素(包括itup指向的元素)
    ●Map.max_size()返回该系统中所能存储最大映射关系的个数

●Map.size() 返回存储元素的个数
● m1.swap(m2) 交换两个映射

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值