码迷,mamicode.com
首页 > 编程语言 > 详细

C++primer(第四版)复习笔记—第二篇:容器和算法

时间:2015-04-05 09:08:57      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:c++   容器与算法   迭代器   map   set   

关联容器

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;

}

C++primer(第四版)复习笔记—第二篇:容器和算法

标签:c++   容器与算法   迭代器   map   set   

原文地址:http://blog.csdn.net/yuyixinye/article/details/44876831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!