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

本文通过一个具体的C++程序实例介绍了如何使用map和vector来处理文件中的数据。该程序从一个文本文件读取姓名和生日信息,并使用map按姓氏进行组织,每个姓氏下用vector存储对应的名字及生日。最后将整理后的数据输出到控制台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  学习关联容器一章,看到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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值