本文主要是介绍详解map、multimap、unordered_map、unordered_multimap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
详解map、multimap、unordered_map、unordered_multimap
相信有不少同学和我一样刚接触C++ STL,被其深深吸引。但是想弄懂每个模板类不是一个容易事。大家应该对vector、list、stack、queue等类比较了解了,所以今天详细介绍下几个很常用很强大但有点不太好懂的类map、multimap、unordered_map、unordered_multimap。乍一看都差不多都是什么map,但这肯定有所不同。下面就在一个一个讲解的同时,让大家了解这四个类的使用,以及不同之处。
map
1) 从一个简单的例子开始
2) #include<map> 3) #include<iostream> 4) using namespace std; 5) 6) int main() 7) { 8) map<char,int> msi; 9) //map::operator[] 10) msi['x'] = 3; 11) msi['z'] = 3; 12) msi['g'] = 2; 13) msi['y'] = 1; 14) //map::at() 15) auto beg = msi.begin(); 16) for(; beg !=msi.end();beg++){ 17) cout<<msi.at(beg->first)<<" "; 18) } 19) cout<<endl; 20) return 1; 21) }
结果: 2 3 1 3 |
代码分析:
l map::operator[]
mapped_type& operator[] (const key_type& k);
mapped_type& operator[] (key_type&& k);
该函数通过调用mak_pair函数将k,v作为一个kv对,在通过insert函数按照k将v插入map中。
l map::at
mapped_type& at (const key_type& k);
const mapped_type& at (const key_type& k) const;
该函数通过k来找到v值。
l 从结果看出,打印是按照k值递增来打印v值的。
2) 从例子1)继续
我们对例子1中的代码进行下修改。
1) #include<map> 2) #include<iostream> 3) using namespace std; 4) 5) int main() 6) { 7) map<char,int> msi; 8) // |
这篇关于详解map、multimap、unordered_map、unordered_multimap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!