STL map映照容器(一)map创建、元素插入、元素删除和遍历访问

map映照容器的元素数据是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。

map映照容器的数据结构是采用红黑树来实现的,插入元素的键值不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。

键值 映照数据
Name Number
Tom 98
Tony 96
Amy 97

使用map容器需要头文件包含语句#include

1.map创建、元素插入和遍历访问

创建map对象,键值与映照数据的类型由自己定义。在没有指定比较函数时,元素的插入位置是按键值由小到大插入到红黑树中去的,这点和set一样。

下面这个程序详细说明了如何操作map容器。

#include 
#include 
#include 
using namespace std;
int main()
{
	map<string,int> m; 
	//定义map对象,当前没有任何元素
	m["Tom"]=98;
	m["Tony"]=96;
    m["Amy"]=97;
    //插入元素,按键值的由小到大放入红黑树中
    map<string,int>::iterator it;
    for(it=m.begin();it!=m.end();it++)
    {
        cout<<(*it).first<<" : "<<(*it).second<<endl;
        //输出键值与映照数据
    }
    //前向遍历元素
    return 0}

运行结果:
Tom : 96
Tony : 98.5
Amy : 97.5

程序编译时,会产生代号为“warning C4786”的警告,“4786”是标记符超长警告的代号。可以在程序的头文件包含代码前使用#pragma warning(disable:4786)宏语句,强制编译器忽略该警告。4786号警告对程序的正确性与运行并无影响。

2.删除元素

set容器一样,map容器的erase()删除元素函数,可以删除某个迭代器位置上的元素、等于某个元素的值、一个迭代器区间上的所有元素。当然也可以使用clear()方法清空map映照容器。
下面这个程序演示了删除map容器中键值为28的元素:

#pragma warning (disable:4786)
#include 
#include 
#include 
using namespace std;
int main()
{
	map<int,char> m;
	//定义map对象,当前没有任何元素
	m[25]='m';
	m[28]='k';
	m[10]='x';
	m[30]='a';
	//插入元素,按键值的由小到大放入红黑树中
	m.erase(28);
	//删除键值为28的元素
	map<int,char>::iterator it;
	for(it=m.begin();it!=m.end();it++)
	{
		cout<<(*it).first<< : <<(*it).second<<endl;
		//输出键值与映照数据
	}
	//前向遍历元素
	return 0}

运行结果:
10 : x
25 : m
30 : a

你可能感兴趣的:(C++,STL)