
即ret是一个pair,
他的first是迭代器,他的位置是给定关键字元素的位置,
second是bool值 ret.second你加的是bool,应该不行的。
你的测试时怎么成功的,应该不行啊。
输入1 2 1 2 1
现在的map是 (1, 3)(2, 2)
输入2
ret返回pair(2的迭代器,bool)
ret.first(2的迭代器)->second(value++)
(1,3)(2,3)
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。本文主要总结一下map基本用法和嵌套用法示例。
一、map基本用法
1 头文件
#include <map>
2 定义
map<int, int> my_Map//注意这里的int和int可以是其他类型
或者是typedef map<int, int> MY_MAP
MY_MAP my_Map
3 插入数据
(1) my_Map[1] = 1
(2) my_Map.insert(map<int, int>::value_type(2,2))
(3) my_Map.insert(pair<int,int>(3,3))
(4) my_Map.insert(make_pair<string,int>(4,4))
4 查找数据和修改数据
(1) int i = my_Map[1]
my_Map[1] = i
(2) MY_MAP::iterator my_Itr
my_Itr.find(2)
int j = my_Itr->second
my_Itr->second = j
注意:
A.键本身是不能被修改的,除非删除。
B.不管键存不存在,比如my_Map[1] = i,都会执行赋值 *** 作。
5 删除数据
(1) my_Map.erase(my_Itr)
(2) my_Map.erase(3)
6 遍历数据
for (my_Itr=my_Map.begin() my_Itr!=my_Map.end() ++my_Itr) {}
7 其它方法
my_Map.size() :返回元素数目
my_Map.empty():判断是否为空
my_Map.clear() :清空所有元素
二、嵌套用法
1.示例如下:
[cpp]
map<int,map<int,int>>multiMap//对于这样的map嵌套定义,
map<int, int>temp //定义一个map<int, string>变量,对其定义后在插入multiMap
temp[9] = 9
temp[10] = 10
multiMap[10] = temp
multiMap[10][11]=11
multiMap[5][30]=30
map<int,map<int,int>>::iterator multitr // 以下是如何遍历本multiMap
map<int,int>::iterator intertr
for(multitr=multiMap.begin()multitr!=multiMap.end()multitr++)
{
for(intertr= multitr ->second.begin()intertr != multitr ->second.end()intertr ++)
cout<<multitr ->first<<" "<<intertr->first<<" ("<<intertr ->second <<")"<<endl
}
2.
也可以这样:
[cpp]
map<int,map<int,int>* >multiMap
map<int, int>* temp = new map<int, int>
multiMap[10]=temp
这样动态new内存,就要记得delete,否则会有内存泄露,delete如下:
[cpp]
map<int, int>* temp1
for(multitr=multiMap.begin()multitr!=multiMap.end()multitr++)
{
temp1 = multitr ->second
delete temp1
temp1 = NULL
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)