关联容器和顺序容器逻辑结构上是不同的,顺序容器是线性表,而关联容器是二叉树。所以他们就分别具备了线性表和二叉树的特点。顺序容器添加元素的位置和逻辑上添加的顺序是一致的,比如添加三个元素,这三个元素就会按照顺序添加到容器的末尾。关联容器对于map来说,元素之间是按照键的升序排列的。map容器中保存的是键值对,即一个键对应一个值,键不允许重复。下面看看如何对这个容器增删改查吧!

#include <iostream>
#include <map> //map容器使用的头文件

using namespace std;

int main()
{
	map<int,string> myMap;
	//使用如下的方式为map容器中添加元素,一个是键,一个是值,[]操作符被map重载了
	myMap[0] = "www";
	myMap[2] = "com";
	myMap[2] = ".com"; //先前已经添加了一个键为2的元素,这里会覆盖掉用来的值
	//元素添加时候的位置默认是按照键的升序排列的
	myMap[1] = "zaojiahua";

	map<int,string>::const_iterator map_iter;
	//使用迭代器来遍历容器
	for(map_iter = myMap.begin();map_iter != myMap.end();map_iter++)
	{
		//对map_iter进行解引用返回的是一个pair的对象,这个pair对象包含俩个public的成员变量一个是first,这个存储的是
		//放到map中的键,另一个是second,这个存放的是map中的值。
		cout<<"键:"<<map_iter->first<<"值:"<<map_iter->second.c_str()<<endl;
	}

	//插入的时候如果存在相同的值不会覆盖掉的,返回值是pair类型的对象,这个对象中保存了插入的位置,和是否插入成功
	//的bool值,make_pair()函数返回的是一个pair的对象(insert需要传入一个pair的对象)
	pair<map<int,string>::iterator,bool> ret = myMap.insert(make_pair(0,"wwww"));
	cout<<myMap[0].c_str()<<endl;
	cout<<"插入结果"<<ret.second<<endl;

	//find返回指向键处的迭代器,不存在的话就返回指向最后一个元素的后一个元素的迭代器
	map_iter = myMap.find(2);
	cout<<map_iter->second.c_str()<<endl;

	//与顺序容器不同的是,erase()成员函数返回void,而顺序容器则返回一个指向被删除元素的后一个迭代器。
	myMap.erase(map_iter);

	//传入一个键,返回删除的元素个数
	 int count = myMap.erase(2);
	 cout<<"删除的元素个数是:"<<count<<endl;

	return 0;
}

关联容器map