STL之map

关于map的简单应用需要注意一下几个方面:
1、包含头文件:#include <map>
2、声明形式:
map<type1,type2> m;其中type可以是任何数据类型,包括自己写的结构体、类等等,当然也可以是string 类。
3、数据的插入:
1)用insert插入pair型数据:m.insert(pair<type1,type2>(element1,element2));
2)用insert插入value_type型数据:m.insert(map<type1,type2>::value_type(element1,element2));
3)直接采用数组形式插入数据:m[element1]=element2;
对以上三例均举例说明:
map<string,string> m;
string a="hehe";
string b="haha";
m.insert(pair<string,string>(a,b));//方法1
m.insert(map<string,string>::value_type(a,b));//方法2
m[a]=b;//方法3
上面方法虽然都可以插入数据,但是是有区别的:
第一种和第二种方法用insert()插入等效。但是insert()和数组方式插入元素的方法不同:insert()插 入元素遵循集合元素的唯一性,如果map集合中本来就有关键字为element1的元素,则再次insert的话是 插不进去的,但是用数组方式可以覆盖原来的element2。这点要谨记!~
4、可用size()函数查看当前m内元素的多少。
5、m内元素的遍历:
1)可以用前向迭代器
2)可以用反向迭代器
3)可以用数组遍历(但是这种情况下好像只有关键字是整数类型的才可以,而且如果关键字不连续,输 出的结果可能会有空行)。
以下示例:
map<string,string> m;
map<string,string>::iterator it;
map<string,string>::reverse_iterator itr;
string a="hehe";
string b="haha";
m.insert(pair<string,string>(a,b));
m.insert(pair<string,string>(b,a));

for(it=m.begin();it!=m.end();++it)
{
printf("%s %s/n",(it->first).c_str(),(it->second).c_str());
}

for(itr=m.rbegin();itr!=m.rend();++itr)
{
printf("%s %s/n",(itr->first).c_str(),(itr->second).c_str());
}

输出遍历输出的形式就略过不写了,有兴趣可以自己写一下。
6、m内元素的查找:
这里只打算讲一种方法:利用find()函数,如果查找成功,返回查找到的元素的地址,否则返回 m.end();
m的初始化如上,itr(我习惯将前向迭代器命名为itr)为前向迭代器。
itr=m.find(a);
if(itr!=m.end())
{
printf("%s/n",(itr->second).c_str());//输出结果为haha
}
else
{
……
}
7、m的判空可以用empty()函数
8、m的清空可以用clear()函数
9、删除某个元素:
用erase()函数:它有三个重载了的函数:
1)itr=m.find(a);
m.erase(itr);
2)int n=m.erase(a);
3)m.erase(m.begin(),m.end());//把整个m内的元素全部删除
10、排序
关于内部元素排序机制,默认的是按照关键字从小到大排,如果要按照其他方式排序则需要重载<操作 符,再次不细说,可上网查阅。
另外,map的空间消耗比较大,因为它在不存储你的数据时每个节点也是要占用16个字节的,一个父节点指针,左右孩子指针,一个枚举值(表示红黑的,相当于平衡二叉树中的平衡因子),因此占用内存比较大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值