C++ STL--map容器
C++ STL MAP介绍
·
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》
更多推荐
已为社区贡献1条内容
所有评论(0)