【日常学习】STL之map

对map最初的印象,源于王建德老师在山东NOIP夏令营上那销魂的一句“map,i,j”(音:唛颇,挨,杰= =)ruka上对map并没有讲很多,TY菌说map主要用来写哈希(虽然她曾用它写过邻接矩阵= =循环嵌套map intOrz),而李晨和里奥甚至表示基本不用map。但是既然有这一项奇妙的东西,想必是有用的,把前两节学的总结一下。

map是一个映射,也称关联数组,是一周关联式容器。和数学里的映射一样,每一个下标都有其一一对应的元素,,功能上大致可以看作可以用各种数据类型做下标的数组。在这里我们不追究有的下标没有元素或有的元素没有下标的问题。据里奥、TY菌所言,map像是一个高级数组,但本质上是一个红黑树,无法直接输出,连迭代器和指针好像也不能直接输出,因为它是成对存储的元素。但这并不是意味着不能输出,可以用迭代器加上->second或是指针值加上.second这样。我在百度上看到有人这样说:

“map<string, int>::iterator map_it = word_count.begin();//可以这样理解么:给一个一个关联容器map的一个迭代器用.begin()成员函数赋值,赋值的结果是word_count的第一个值cout << map_it->first;迭代器就是指针。指向这个关联容器,关联容器有键和值,first就是键,second就是值。这个程序后面还有一句++map_it->second;这个这么理解呢?

写成++map_it->second;这样不好理解的话,你都写成++(*map_it).second;//自己补充:map_it迭代器相当于指针其实就是指针。这里应该是对应键的值加1。”

map具有去重和自动排序功能,可以用count查出现次数,但是返回值最大是1;但multisets,multimaps返回值可以大于1【已证实

这里引用一下本站fangrk老师的话

“我们判断一个key是否存在,如果存在就输出,不存在就不输出map<string,int>a;cout<<a["abc"]<<endl;如果a中间原本没有"abc",那么a["abc"]会把"abc"加入到a中间,因此不能使用这种方法if(a.count("China"))//对了cout<<a["China"]<<endl;这种方法正确,但是效率不高:count先要查找一遍a,然后a["China"]又要查找一遍,我建议使用下面的方法:map<string,int>::iteratorfi=a.find("China");//查找是否有"China",返回一个迭代器if(fi!=a.end())cout<<a->second;//找到了,输出"China"对应的int值”

声明:

需要用到头文件map

map<string,int> cnt 建立一个map映射,键(key,就是下标)基类型为string,所指向的元素值(value)基类型为int,这个映射的名字叫做cnt

常用函数:

基本和set一致,支持insert、find、count、remove等。这里补充一下cnt.count()是用于查找某元素出现次数的函数 具体规则上面有介绍

在这里补充一个本站的链接:

是很好的学习,有空可以常看一看。对这些东西现在我还知之甚少,我想在之后的学习过程中会慢慢加深,慢慢透过迷雾摸到它本质上的存在。

——伤情处,高城望断,灯火已黄昏

陪我们走过一段别人无法替代的记忆。在那里,

【日常学习】STL之map

相关文章:

你感兴趣的文章:

标签云: