美文网首页
c++primer 11.12-11.23

c++primer 11.12-11.23

作者: 青吟乐 | 来源:发表于2019-05-23 11:13 被阅读0次

11.12与11.13都在下面的代码里包括创建pair的方法

#include <iostream>
#include<map>
#include<vector>
#include<string>
#include<utility>
#include<fstream>
#include<sstream>
using namespace std;

int main()
{

    /**11.12-11.13*/
    //1,定义装载pair的vector容器
    vector<pair<string,int>> vec_11_12;
    ifstream ifs_s("C:\\study\\c++test\\endless.txt");
    ifstream ifs_i("C:\\study\\c++test\\int.txt");

    string str;
    int k;
    //2,向容器内添加元素,用push_back
    auto i=0,j=0;
    //一次读入一个string和一个int,放入一个pair中,再将这个pair放到vector中
    while(ifs_s>>str&&ifs_i>>k){
        /*几种创建pair的方法*/
        //1,pair<string,int> section={str,k};
        //2,vec_11_12.push_back({str,k});
        //3,vec_11_12.push_back(make_pair(str,k));
        //4,最简便
        vec_11_12.emplace_back(str,k);
        i++;
        j++;
    }
    //输出一下
    for(auto c:vec_11_12){
        cout<<c.first<<" :"<<c.second<<endl;
     }

   
}

11.14

#include <iostream>
#include<map>
#include<vector>
#include<string>
#include<utility>
#include<fstream>
#include<sstream>
using namespace std;

int main()
{


     /**11.13*/
     map<string , vector<string>> family;
     //在原题目基础上增加vector
     vector<pair<string,int>> vec_11_14;
     string first_name;
     string last_name;
     int birth;
     while([&first_name](){cout<<"please input family_name:";return cin>>first_name&&(first_name!="end"); }()){
        cout<<"please input last_name and birth:";
        //输入信息的时候将名字与生日用默认构造函数添加到vector中
        while(cin>>last_name&&(last_name!="end")&&cin>>birth){
            vec_11_14.push_back({last_name,birth});
            family[first_name].push_back(last_name);
        }
     }
     for(auto c:family){
        for(auto w:c.second){
            cout<<c.first<<" ";
            cout<<w<<" 's birth is ";
            //寻找显示
            for(auto k:vec_11_14){
                if(k.first==w){
                    cout<<k.second;
                }
            }
        }
        cout<<endl;
     }
     
}

11.15
对于

map<int,vector<int>> imap;

它的value_type 为 pair<int,vector<int>>
mapped_type 为 vector<int>
key_type为int

11.16
注意map的关键字不可更改,为const类型

#include <iostream>
#include<map>
#include<fstream>
using namespace std;

int main()
{
    map<string, size_t> word_count;
    string word;
    ifstream ifs("C:\\study\\c++test\\endless.txt");

    while(ifs>>word){
        word_count[word]++;
    }

    auto iter=word_count.begin();
    //map的关键字不能改变为const类型
    //iter->first="xxx";
    iter->second=10;
    return 0;
}

11.17
综合关联容器不能够使用泛型算法,即不能使用push_back,但是back_inserter需要使用到push_back,所以第二个调用不合法
11.18
map<string, size_t>::iterator
11.19

    //11.19
    using compareType = bool(*)(const Sales_data &ihs,const Sales_data &rhs);
    multimap<Sales_data,compareType>  bookstore(compareIsbn);
    multimap<Sales_data,compareType>::iterator it=bookstore.begin();

11.20

#include <iostream>
#include<vector>
#include<set>
#include<map>
#include<fstream>
#include<utility>
using namespace std;

int main()
{
    //11.20
    map<string, size_t> word_count;
    string word;
    ifstream ifs("C:\\study\\c++test\\endless.txt");

    while(ifs>>word){
        auto ret=word_count.insert({word,1});
        if(!ret.second){
            ++ret.first->second;
        }
    }
    
    return 0;
}

11.21
++word_count.insert({word,0}).first->second
word_count.insert({word,0})插入元素并且返回一个pair,pair的first为指向插入元素的迭代器,second为一个是否插入成功的bool值
word_count.insert({word,0}).first 指向插入元素的迭代器
++word_count.insert({word,0}).first->second插入元素的mapped_value值自加一
11.22

#include <iostream>
#include<vector>
#include<set>
#include<map>
#include<fstream>
#include<utility>
using namespace std;

int main()
{
    //11.22
    map<string,vector<int>> imap;
    vector<int> ivec{1,2,3,4,5,6};
    imap.insert({"str",ivec});
    for(auto c:imap){
        cout<<c.first<<" ";
        for(auto a:c.second){
            cout<<a<<" ";
        }
        cout<<endl;
    }

    return 0;
}

11.23

#include <iostream>
#include<vector>
#include<set>
#include<map>
#include<fstream>
#include<utility>
#include<algorithm>
using namespace std;

int main()
{

    //11.23
    multimap<string,string> family;
    string first_name;
    string second_name;
     while([&first_name](){cout<<"please input family_name:";return cin>>first_name&&(first_name!="end"); }()){
        cout<<"please input second_name :";
        cin>>second_name;
        family.emplace(first_name,second_name);
        //family.insert({first_name,second_name});
     }
     for(auto c:family){
        cout<<c.first<<" :"<<c.second<<endl;
     }


    return 0;
}

相关文章

网友评论

      本文标题:c++primer 11.12-11.23

      本文链接:https://www.haomeiwen.com/subject/wnkvzqtx.html