首页 / C++ / c++ STL之map容器
c++ STL之map容器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++ STL之map容器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2611字,纯文字阅读大概需要4分钟。
内容图文
![c++ STL之map容器](/upload/InfoBanner/zyjiaocheng/729/e234e3f811134b3d885dd12b2592a5e3.jpg)
简介
序列容器不提供方便的数据访问机制,相比而言,map容器提供了一种更高效的存储和访问数据的方法。
map容器是关联容器的一种。在关联容器中,元素的位置取决于和它关联的键的值。
map容器的元素是pair<const K,T >类型的对象,这种对象封装了一个T类型对象和一个与其关联的K类型的键。
map<K,T>
容器
头文件:#include <map>
特点:每个键都是唯一的,可以保存重复的对象,只要他们的键不同。容器中的元素都是有序的。
元素组织形式:红黑树(一种适度平衡的二叉搜索树,最长路径与最短路径不能相差2倍以上)
multimap<K,T>
容器
头文件:#include <multimap>
特点:允许使用重复的键,除此以外和狭义的map容器没什么不同
元素组织形式:红黑树
unordered_map<K,T>
容器
头文件:#include <unordered_map>
特点:元素的顺序不是直接由键值决定的,而是由键值的哈希值决定的。哈希值是由键值通过哈希函数生成的整数。该容器不允许重复的键。
元素组织形式:散列表
unordered_multimap<K,T>
容器
头文件:#include <unordered_multimap>
特点:该容器允许重复的键。除此以外和unorder_map容器没什么不同。
元素组织形式:散列表
基本操作
1.创建map容器
std::map<std::string , size_t> people;
//或者通过初始化列表
std::map<std::string , size_t> people{ { "anna", 26} ,{"Bill" , 43} };
// utility头文件定义了 make_pair<T1,T2>() 函数模版
std::map<std::string, size_t> people { std::make_pair(" Jack" ,33), std::make_pair("bill" ,32)};
//通过复制构造函数
std::map<std::string , size_t> personnel{people};
std::map<std::string , size_t> personnel(people);
//通过另一个容器的一段元素来创建
std::map<std::string , size_t> personnel {people.begin(), people.end()}
2.插入元素
auto pr = people.insert({"sdgg", 34}); // 返回的pr是这样一个对象,它的成员变量 first 是新插入元素的迭代器, 成员变量second 是一个布尔值,如果插入成功则返回true
people["banny"] = 32; // 如果没有banny这个键,则添加这个键
3.就地构造元素
在map 的适当位置直接构造新元素,避免复制和移动操作
std::map<std::string , size_t> people;
auto pr = people.emplace( {"jack",33}); // 此处的pr 和insert() 返回的对象是一样的
4.访问元素
auto Jack = people.at("jack"); // 返回的是“Jack”词条下对应的数值 ,如果jack 不存在则返回异常
auto jack = people["jack"] ; // 如果jack不存在则返回0 ,同时插入了一个键值对,{“jack” , 0}
5.检索元素
auto iter = people.find("jack") ; // 返回的是jack位置的迭代器,如果没有jack 则返回 people.end()
cout << iter->first << " " <<iter->second <<endl;
输出: jack 33
auto a = people.count("jack"); // 对其中的jack 计数,返回数量,
6.删除元素
people.erase("jack"); //移除键和参数匹配的元素,然后返回移除元素的个数
people.erase(++people.begin(), --people.end()) ; // 移除两个迭代器参数所定义范围的元素,此句删除除首尾以外的所有参数, 返回被移除的最后一个元素的下一个位置
people.clear() ; // 删除所有元素
内容总结
以上是互联网集市为您收集整理的c++ STL之map容器全部内容,希望文章能够帮你解决c++ STL之map容器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。