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;
}









网友评论