C++ STL–map容器

  • Post author:
  • Post category:其他




1、map容器简介

map是C++ STL的一个关联容器,它提供一对一的数据处理能力。其中,各个键值对的键和值可以是任意数据类型,包括 C++ 基本数据类型(int、double 等)、使用结构体或类自定义的类型。

  • 第一个可以称为关键字(key);
  • 第二个可能称为该关键字的值(value);

使用 map 容器存储的各个键值对,键的值既不能重复也不能被修改。换句话说,map 容器中存储的各个键值对不仅键的值独一无二,键的类型也会用 const 修饰,这意味着只要键值对被存储到 map 容器中,其键的值将不能再做任何修改。



2、map容器原理

map容器的实现是自建了一颗红黑树,这颗树具有对数据自动排序的功能,在map内部所有的数据都是有序的。关于红黑树的原理可参考

红黑树(一)之 原理和算法详细介绍



下图展示的是map存储元素的示意图:

在这里插入图片描述



3、map容器函数接口



(1)迭代器函数(Iterators)

在这里插入图片描述

后四个是C++11标准。



(2)容量函数(Capacity)

在这里插入图片描述



(3)元素访问(Element access)

在这里插入图片描述



(4)修改函数(Modifiers)

在这里插入图片描述

后面两个是C++11标准。



(5)观测函数(Observers)

在这里插入图片描述



(6)操作函数(Operations)

在这里插入图片描述



(7)分配器函数(Allocator)

在这里插入图片描述



4、使用示例



(1)插入

  • insert 函数插入 pair 数据
std::map < int , std::string > mapPerson;
mapPerson.insert(pair < int,string > (1,"Jim"));
  • insert 函数插入 value_type 数据
mapPerson.insert(std::map < int, std::string > ::value_type (2, "Tom"));
  • 用数组方式插入数据
mapPerson[3] = "Jerry";



(2)遍历

  • 前向迭代器
	std::map < int ,std::string > ::iterator it;
    std::map < int ,std::string > ::iterator itEnd;
    it = mapPerson.begin();
    itEnd = mapPerson.end();
    while (it != itEnd) 
    {
		cout<<it->first<<' '<<it->second<<endl;  
		it++;
	}
  • 反向迭代器
std::map < int, string > ::reverse_iterator iter;  
for(iter = mapPerson.rbegin(); iter != mapPerson.rend(); iter++) 
	cout<<iter->first<<"  "<<iter->second<<endl; 
  • 数组形式
mapPerson.insert(std::map<int, std::string>::value_type (1, "Tom"));
mapPerson[2] = "Jim";
mapPerson[3] = "Jerry";

int nSize = mapPerson.size();
for(int n = 1; n <= nSize; n++)
	qDebug()<<QString::fromStdString(mapPerson[n]);



(3)查找

map<int ,string > ::iterator l_it;; 
   l_it = maplive.find(112);
   if(l_it == maplive.end())
                cout<<"we do not find 112"<<endl;
   else cout<<"wo find 112"<<endl;



(4)删除

iterator erase(iterator it)	;//通过一个条目对象删除
iterator erase(iterator first,iterator last);	//删除一个范围
size_type erase(const Key&key);	//通过关键字删除
clear()//就相当于enumMap.erase(enumMap.begin(),enumMap.end());

参考资料:

《https://www.w3cschool.cn/cpp/cpp-fu8l2ppt.html》

《https://www.cplusplus.com/reference/map/map/》

《https://mropengate.blogspot.com/2015/12/cc-map-stl.html》



版权声明:本文为jisuanji111111原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。