std::map容器
发布日期:2021-09-25 21:40:47 浏览次数:15 分类:技术文章

本文共 1957 字,大约阅读时间需要 6 分钟。

std::map 是有序的键值对容器,map中的元素是自动按Key(键)升序排序。

它的元素的键是唯一的。可以用比较函数 Compare 自定义排序。map的内部实现通常为红黑树。

代码:

下面分别演示std::map的 增、删、改、查、迭代器使用、auto关键字使用、以及自定义排序规则。

#include 
#include
using namespace std;//自定义比较类class MyCompare {public: //降低理解难度,暂时不使用函数模板 bool operator()(const int &lnum, const int &rnum) const { return lnum > rnum; }};typedef map
MyMap;typedef map
MyCompareMap;//重载,暂时不使用函数模板void printf_myMap(const MyMap &map) { auto mapIter = map.begin(); for (; mapIter != map.end(); mapIter++) { cout << mapIter->first.c_str() << "->" << mapIter->second.c_str() << endl; }}void printf_myMap(const MyCompareMap &map) { auto mapIter = map.begin(); for (; mapIter != map.end(); mapIter++) { cout << mapIter->first << "->" << mapIter->second.c_str() << endl; }}int main(){ MyMap mymap; //插入方法1 mymap["1"] = "稻香"; mymap["1"] = "青花瓷"; //青花瓷替换了稻香,没有稻香了 //插入方法2 mymap.insert(pair
("3", "彩虹")); mymap.insert(pair
("4", "夜曲")); //插入方法3 mymap.insert(MyMap::value_type("6", "晴天")); mymap.insert(MyMap::value_type("6", "蜗牛")); //蜗牛insert不进去了,因为已经有6了 printf_myMap(mymap); cout << "----------------我是分割线----------------" << endl; MyMap::iterator iter; //查找 iter = mymap.find("6"); if (iter != mymap.end()) { cout << "find is=" << iter->second.c_str() << endl; //删除 iter = mymap.erase(iter); } printf_myMap(mymap); cout << "----------------我是分割线----------------" << endl; //修改 mymap["1"] = "七里香"; mymap["2"] = "东方破"; printf_myMap(mymap); cout << "----------------自定义排序----------------" << endl; //这次我们按降序 来输出 map中的元素 MyCompareMap myCompareMap; myCompareMap[1] = "james"; myCompareMap[3] = "curry"; myCompareMap[99] = "harden"; myCompareMap[5] = "durant"; printf_myMap(myCompareMap); getchar(); return 0;}

以上写的三种用法,虽然都可以实现数据的插入,但是它们是有区别的,

当然pair<string, string>和MyMap::value_type效果是一样的。
但是用insert函数插入数据,在数据的插入上涉及到集合的唯一性的概念,
即当map中已经有这个关键字时,insert操作是无效的,
但是用数组方式如mymap["1"] = "稻香";就不同了,它可以覆盖以前关键字对应的值。

输出:

 

转载地址:https://blog.csdn.net/c_shell_python/article/details/106416364 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c++之简单工厂模式
下一篇:std::vector容器

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月17日 05时18分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章