c++ primer 关联容器习题练习

来源:互联网 发布:有java基础学安卓 编辑:程序博客网 时间:2024/06/07 10:39

  学习关联容器一章,看到map,稀稀松松已经看到第10章。基础东西学了一大堆,做个习题巩固一下。

 问题如下:

               

代码如下:

            

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <map>
#include <utility>

using namespace std;

int main()
{
  ifstream in_file,res_file;
  string line,str_first,str_name;
  int int_date;
  in_file.open("123.txt"); //文件格式为 第一列姓名,第二列名字,第三列生日
  typedef pair<string,int> name_date;
  typedef map<string,vector<name_date> > name_first;
  name_first first_name;
  vector<name_date> vec_con;
  while (getline(in_file,line))
  {
   istringstream in_string(line);
   while (in_string>>str_first>>str_name>>int_date)
   {
    pair<name_first::iterator,bool> pair_insert;
    vec_con.push_back(make_pair(str_name,int_date));
    pair_insert=first_name.insert(make_pair(str_first,vec_con));  /
    if (!pair_insert.second)
    {
     pair_insert.first->second.push_back(make_pair(str_name,int_date));
    }
   }
   vec_con.clear();
  }

//insert成功,证明map中无此姓氏存储,失败则有存储,需要更新姓氏对应的vector
  in_file.close();
  for (name_first::iterator map_it = first_name.begin();
  map_it != first_name.end(); map_it++)
  {
   cout<<map_it->first<<":"<<endl;
   for (vector<name_date>::iterator vec_it = map_it->second.begin();
   vec_it != map_it->second.end(); vec_it++)
   {
    cout<<vec_it->first<<"->"<<vec_it->second<<endl;
   }
  }
 
  return 0;
}

 

0 0
原创粉丝点击