C++之STL(map容器初步)(蓝桥杯备战)

pair类型

pair 类定义在 <utility>头文件中。pair 是一个类模板,它将两个值组织在一起,这两个值的类型可不同。可以通过 first 和 second 公共数据成员来访问这两个值

pair对象常常作为元素被添加到map中

pair对象的定义

pair<int, string> mypair(5 , "Jack");   //调用构造函数

pair<int, string> otherPair ;           // 直接赋值
otherPair.first = 6;
otherPair.second = “Mike";

函数模板 make_pair( ) 能从两个变量构造一个 pair

pair<int, int > aPair = make_pair( 5, 10 ) ;

map

1.创建及添加元素

map 类定义在<map>头文件中

创建map对象:

map<int, string> StuInfo;

这就定义了一个用int作为键, 相关联string为值的map

插入pair对象:

pair<int, string> mypair(1, "Tom");
StuInfo.insert(mypair);

StuInfo.insert(pair<int, string>(5, "Jack"));

2.map中使用运算符[ ]

用[ ]操作符修改元素的值(键不可修改

StuInfo[1] = "Jim";

因为键为 1 的元素存在,因此修改元素

用[ ]操作符添加元素

StuInfo[2] = "Lily";

先查找主键为2的项,没找到,因此添加这个键为 2 的项

PS:在代码中,[ ]中的数字为key值,并不是数组下标,key可是是任何类型的值!

用[ ]取得元素的值

cout<<StuInfo[5] ; // 输出键 5 对应的值

3.在map中查找元素

用find()查找map中是否包含某个关键字

int target = 3;
map<int,string>::iterator it;
it = StuInfo.find(target); //查找关键字target
if( it == StuInfo.end() )
{
    cout<<"not existed!"
}
else
{
    cout<<"find it!"<<endl;
}

若查找成功则返回目标项的迭代器,否则返回 StuInfo.end() 迭代器

4.在map中删除元素

通过erase()函数按照关键字删除

int r = StuInfo.erase(1);

若删除成功,返回 1 ,否则返回 0

用clear()清空map

再论迭代器

STL 中的迭代器按功能由弱到强分为5种:

1. 输入:Input iterators 提供对数据的只读访问。

1. 输出:Output iterators 提供对数据的只写访问

2. 正向:Forward iterators 提供读写操作,并能一次 一个地向前推进迭代器。

3. 双向:Bidirectional iterators提供读写操作,并能一次一个地向前和向后移动。

4. 随机访问:Random access iterators提供读写操作,并能在数据中随机移动。

编号大的迭代器拥有编号小的迭代器的所有功能,能当 作编号小的迭代器使用。

容器所支持的迭代器类别

容器迭代器类别
vector随机
deque随机
list双向
set/multiset双向
map/multimap双向
stack不支持迭代器
queue不支持迭代器

PS: 关联容器支持双向迭代器,它支持 : * 、++ 、– 、 = 、== 、!= 不支持 < 、<= 、>= 、 >

map中迭代器的使用

下面迭代器中”<”使用错误:

map<int,string> m;
map<int,string>::iterator it;
for(it = m.begin();it < m.end(); it++)  //不能使用“<”
{ ***** }

下面是map迭代器正确的用法:

map<int,string> m;
map<int,string>::iterator it;
for(it = m.begin();it != m.end(); it++)
{ ***** }

例子

#include<iostream>
#include <string>
#include <utility>
#include <map>
using namespace std;
int main ()
{
    map<int,string> StuInfo;
    StuInfo.insert(pair<int, string>(1, "Tom"));
    StuInfo.insert(pair<int, string>(5, "Jack"));
    StuInfo[2]="Lily";
    map<int,string>::iterator it;
    for(it = StuInfo.begin();it != StuInfo.end(); it++)
        cout<<(*it).first<<" "<<(*it).second<<endl;
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值