12:涉及到的知识点:pair,标准库类型,保存在头文件utility中,保存两个数据成员,类似容器,是用来生成特定类型的摸板。
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<utility>
using namespace std;
int main(int argc,char **argv)
{
vector<pair<string,int> > vec(12);
ifstream in1("1.txt");
string str;
size_t i = 0;
while(in1 >> str)
{
vec[i].first = str;
i++;
}
ifstream in2("2.txt");
int result;
i = 0;
while(in2 >> result)
{
vec[i].second = result;
i++;
}
vector<pair<string,int> >:: iterator it1 = vec.begin();
cout<<"vector :" << endl;
for(it1;it1 != vec.end();it1++)
{
cout << "vec first :" << it1->first << " second :" << it1->second << endl;
}
return 0;
}
13、pair有三种定义方式,所以创建pair的方式也有三种。
vec.push_back(std::make_pair(str, i));//make_pair返回一个用两个参数构成的pair
vec.push_back({str, i});
vec.emplace_back(str, i); //最简便
14、
#include<iostream>
#include<string>
#include<fstream>
#include<list>
#include<vector>
#include<map>
#include<set>
#include<cctype>//ctype无法打开,包含tolower()函数和ispunct函数
#include<algorithm>
#include<utility>//保存pair的头文件
using namespace std;
int main(int argc, char**argv)
{
//map的定义
map<string,vector<string>> family;
vector<pair<string,string>> child;
string first_name,child_name,_birthday;
cout<<"本输入中,均以end输入表示截至"<<endl;
//在while中使用lambda语句,可以传入多条语句参数,将我们想要传入的的输出参数也放在其中,注意后面的一对括号
while ( [&]()->bool {cout<<"请输入家庭的姓:"; return cin>>first_name && (first_name != "end");}() )
{
while ([&]()->bool {cout<<"请输入孩子的名字:"; return cin>>child_name && (child_name != "end");}())
{
family[first_name].push_back(child_name);
while ([&]()->bool {cout<<"请输入孩子的生日:"; return cin>>_birthday && (_birthday != "end");}())
{
child.push_back(make_pair(child_name,_birthday));
}
}
}
//map同样支持迭代器操作
map<string ,vector<string>>::iterator mapi;
for (mapi = family.begin(); mapi != family.end(); ++mapi)//C++ 11支持:const auto &s : word_count
{
//两个成员分别代表关键字和对应值
cout<<mapi->first<<" :";
vector<string>::iterator it1 = mapi->second.begin();
for (it1; it1 != mapi->second.end(); ++it1)
{
cout<<*it1<<" ";
}
}
vector<pair<string,string>>::iterator it1 = child.begin();
cout<<"孩子们的信息:"<<endl;
for (it1; it1 != child.end(); ++it1)
{
cout<<it1->first<<" "<<it1->second<<endl;
}
return 0;
}