关联容器
1、关联容器与顺序容器的本质区别在于,关联容器是按键key存储和读取元素且按key有序存放,而顺序容器则是按容器中的位置来访问元素,顺序至于加入容器的先后相关。
2、map存储key-value的pair
pair<Type1,Type2> p(v1,v2);//构造给定值的pair
make_pair(v1,v2);//以函数make_piar构造pair
6、map是key_value的集合,可理解为关联数组,以key作为下标来访问元素。如:
map<string,int> word_cnt;//记录单词的出现次数,空
word_cnt["C++Primer"]=2;//注意:以下标访问时,如果该key不存在,则会自动加入该key的一个元素,并将其value赋值为给定值。
而vactor则不能以下标来访问不存在的元素。
7、map的迭代器指向容器中的一个键值对pair,其中pair的key为const对象,只能修改其value。
8、mulitmap与mulitset的删除函数erase只带一个参数版本的,将会删除容器中该key的所有元素,并返回删除的个数,而带迭代器的则只会删除其指定的那一个元素。
9、mulitmap与mulitset中同一key的元素,存储在相邻位置,遍历时可保证依次返回相同key的元素。因此count(key)返回该key的元素个数,而find(key)则返回该key的第一个函数。
以下给出一个应用map容器的简单实例:读取一个文件,记录文件中每个单词出现的次数,并按字典顺序输出出现的单词和对应的次数
#include <iostream>
#include <string>
#include <map>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
ifstream ifile;
string filename;
cout<<"input filename: "<<endl;
//filename="ifile.txt";
cin>>filename;
ifile.open(filename.c_str());
if(!ifile)
{
cout<<"open file failed!";
return -1;
}
map<string,int> word_cnt;
string str;
string word;
while(getline(ifile,str))//按行读文件,并保存
{
istringstream iss(str);
while(iss>>word) //将该按单词分解,并记录其出现的次数
++word_cnt[word];
}
map<string,int>::const_iterator mit=word_cnt.begin();
/*按字典顺序输出每个单词出现的次数(即map字典按key排序)*/
for(;mit!=word_cnt.end();++mit)
{
string temp(" time");
if(mit->second>1)
temp+="s";
cout<<mit->first<<" occurs : " <<mit->second<<temp<<endl;
}
return 0;
}
时间: 2024-12-10 21:37:56