C++ STL--map映照容器学习笔记

    map映照容器所处理的元素数据,与数据库表的具有键值的记录非常相似,由一个键值和其他若干数据(映照数据)组成,键值和映照数据之间,可建立一个数学上的映照关系,由此得到映照容器的名称。

    下图示,map容器的一个元素的数据组成,可通过pair封装成一个结构对象。通过pair对象插入到红黑树,完成一个元素的添加;同时通过提供一个仅使用键值进行比较函数比较的函数对象,将它传递给红黑树。

键值映照数据

    map容器的c++标准头文件为map,先要用宏语句"#include<map>",将红黑树和map的头文件包含进来,才可以对map的程序进行编译。

定义了前向和反向迭代器iterator、const_iterator、reverse_iterator和const_reverse_iterator,对红黑树中的元素进行前向和反向遍历操作。较长使用map<Key,T,compare>::iterator的方式取出迭代器的类型,其中Key是元素的键值的一个具体体现类型,T是元素的映照数据的一个具现类型,compare是关于键值的比较函数对象。

创建map对象

为了操作map的数据,先用map构造函数,创建一个map对象。

利用默认的less<T>函数对象和内存分配器,创建一个没有任何数元素的map对象。

下面实例代码为创建一个空的map对象m,元素的键值类型为char元素的映照数据类型为int键值的比较函数对象为greater<char>

map<char,int,greater<char>> m;

元素的插入

    map容器对象创建后,接着对元素数据(包括键值和映照数据)的二叉树装入。除可使用insert函数,将整个元素数据进行插入外,常用map容器的数组操作"[]",显示地为不同键值赋予内容(映照数据),但后者不能检测是否插入成功。

下面的实例代码为利用map的数组“[]”操作符进行元素的插入。

#include<map>
#include<iostream>
using namespace std;
int main()
{
	map<const char*,float> m;//键值+映照数据
	//插入元素
	m["AB"]=1.1f;
	m["CD"]=1.2f;
	m["EF"]=1.3f;
	return 0;
}
元素的删除

与set集合容器一样,map映照容器的删除函数,可删除某个迭代器位置上的元素、等于某键值的元素、一个迭代器区间上的元素和容器中的所有元素

1) void erase(iterator position)

删除position所指的元素。

2) size_type erase(const key_type&k)

删除键值为k的元素。对map容器来说,此函数总是返回1,因为map容器不会出现键值重复的元素值。

3) void erase(iterator first,iterator last)

删除map迭代器区间[first,last]上的所有元素。

4) void erase()

删除map容器的所有元素。

元素的遍历访问 

    除了使用键值的数组方式方式来访问元素外,更一般可使用map容器的迭代器进行访问。通常需要用begin和end函数找出遍历开始的首元素和结束元素,然后通过迭代器的"++"和"*"操作,读取容器元素。以下是map容器的begin和end函数原型,分别返回指向首尾元素的迭代器位置。

1) iterator begin

2) iterator end

下面的实例代码为将一批学生记录(学号为键值)插入到map容器对象m中,然后利用前向迭代器将其打印。

#include<map>
#include<iostream>
using namespace std;
struct StudentInfo//学生信息结构体
{
    char *name;
    int old;
    char *addr; 
};
struct StudentRecord//学生记录结构体
{
    int id;//学号,作为键值
    StudentInfo sf;//学生信息,作为映照数据
};
int main()
{
	StudentRecord srArray[]={
				{1,"A",1,"北京"}
				};
	map<int,StudentInfo> m;//创建map容器对象m
	m[srArray[0].id]=srArray[0].sf;
	map<int,StudentInfo>::iterator i,iend;
	iend=m.end;
	for(i=m.begin;i!=iend;i++)
	{
		cout<<(*i).first<<' '<<(*i).second.name<<' '<<(*i).second.year<<' '<<(*i).second.addr<<endl;
		return 0;	
	}
}

元素的搜索

    利用map容器提供的find函数,可搜索出具有某一键值的元素。map容器的元素键值是唯一的。find函数返回的迭代器为搜索到的元素位置。如果该元素不存在,则返回一个end结束元素的位置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值