c++ 多级map程序及调试

/*定义全局的map*/
map<string,vector<STA_PA_REG_OPS> >  gr_paMap;
map<string,vector<STA_GN_REG_OPS> >  pa_gn_Map;
/*结构体数组定义在.h文件中*/
16001	/* 发电商静态注册表 */  sta_pa_reg
typedef struct sta_pa_reg_ops
{
	char tag_phy[32];	/* 发电商编码 */     市场成员的编码
	char caption[128];	/* 发电商名称 */	  市场成员名称
	char sub_caption[64];	/* 发电商简称 */
	char participant_code[60];	/* 发电商编码old */
	int power_type;	/* 发电类型 */
	int dispatch_type;	/* 调度类型 */
	int company_type;	/* 商业性质 */
	char market_id[36];	/* 业务场景ID */
	char address[256];	/* 通信地址 */
	char postal_code[60];	/* 邮政编码 */
	char corporation[60];	/* 法人代表 */
	char link_man[60];	/* 常用联系人 */
	char office_phone[60];	/* 办公电话 */
	char telephone[60];	/* 手机号码 */
	char fax_phone[60];	/* 传真号码 */
	char email[60];	/* 电子邮箱 */
	char web_address[256];	/* 企业网址 */
	char licence_code[200];	/* 电力业务许可编号 */
	char deposit_bank[100];	/* 开户银行 */
	char deposit_name[100];	/* 开户名称 */
	char deposit_account[100];	/* 开户帐号 */
	long register_date;	/* 注册时间 */
	long effective_date;	/* 生效时间 */
	long expiration_date;	/* 失效时间 */
	char agreement_id[100];	/* 使用协议书编号 */
	char business_code[100];	/* 工商营业执照号 */
	char tax_code[100];	/* 税务登记证号 */
	char geogr_region_id[36];	/* 地理区域ID */
	char control_area_id[36];	/* 控制区域ID */
	long update_time;	/* 信息更新时间 */
	char update_person[36];	/* 信息更新人编号 */
	char participant_id[36];	/* 市场成员ID */
}STA_PA_REG_OPS;
一条条的从上到下全部查出来吗?
select * from sta_gr_reg where caption= %s  //获得发电集团编码 名称->编码
select * from sta_participantgrouprelation  where sta_participantgrouprelation.gengroup_phy=%s  //获得市场成员编码  
select * from sta_pa_reg where sta_pa_reg.tag_phy=%s               //获得市场成员的名称。
select * from sta_gn_reg where sta_gn_reg.participant_id =%s                          //获得机组名称

#define	STA_PARTICIPANTGROUPRELATION_NO	16026	/* 市场成员与发电集团关系 */
/* 市场成员与发电集团关系 */  sta_participantgrouprelation
typedef struct sta_participantgrouprelation_ops
{
	char participant_phy[36];	/* 市场成员ID */   市场成员编码
	char gengroup_phy[36];	/* 所属发电集团ID */    发电集团编码
	float share_percent;	/* 集团所占股权 */
	long effective_date;	/* 生效时间 */
	long expiration_date;	/* 失效时间 */
	long update_time;	/* 信息更新时间 */
	char update_person[36];	/* 信息更新人编号 */
	int is_mastry;	/* 是否控股方 */
	int is_delete;	/* 删除标记 */
}STA_PARTICIPANTGROUPRELATION_OPS;
#define	STA_GR_REG_NO	16027	/* 发电集团静态注册表 */
/* 发电集团静态注册表 */  sta_gr_reg
typedef struct sta_gr_reg_ops
{
	char tag_phy[32];	/* 发电集团编码 */
	char caption[64];	/* 发电集团名称 */
	char sub_caption[32];	/* 别名 */
	char gengroup_id[36];	/* 发电集团ID */
	long address;	/* 通信地址 */
	long postal_code;	/* 邮政编码 */
	long corporation;	/* 法人代表 */
	char linkman[36];	/* 常用联系人 */
	char office_phone[256];	/* 办公电话 */
	char telephone[32];	/* 手机号码 */
	char fax_phone[32];	/* 传真号码 */
	char email[64];	/* 电子邮箱 */
	char web_address[32];	/* 网址 */
	char effective_date[32];	/* 生效时间 */
	char expiration_date[32];	/* 失效时间 */
	char update_time[64];	/* 信息更新时间 */
	char update_person[256];	/* 信息更新人编号 */
	char market_id[36];	/* 业务场景ID */
	int order_num;	/* 排序号 */
	char super_groupid[36];	/* 上级发电集团ID */
	char top_group[36];	/* 所属顶级发电集团ID */
	int is_delete;	/* 删除标记 */
}STA_GR_REG_OPS;



#define	STA_GN_REG_NO	16005	/* 经济机组静态注册表 */
/* 经济机组静态注册表 */  sta_gn_reg
typedef struct sta_gn_reg_ops
{
	char tag_phy[32];	/* 机组编码 */
	char caption[80];	/* 机组名称 */
	char sub_caption[60];	/* 机组别名 */
	char generator_id[36];	/* 机组ID */
	char generator_code[64];	/* 机组编码 */
	char participant_id[60];	/* 市场成员ID */   市场成员编码
	int generator_type;	/* 机组类型 */
	int generator_type_sub;	/* 机组子类型 */
	int commercial_type;	/* 商业性质 */
	int dispatch_type;	/* 调度性质 */
	float generator_rated_cap;	/* 机组额定容量 */
	float add_capacity;	/* 增容容量 */
	float generator_rated_net_cap;	/* 额定上网容量 */
	float max_tec_power;	/* 机组最大技术出力 */
	float min_tec_power;	/* 机组最小技术出力 */
	float emer_max_net_power;	/* 高于额定容量紧急上网出力 */
	float connect_voltage;	/* 接入电压 */
	float generator_voltage;	/* 机端电压 */
	float coal_consume_ratio;	/* 设计标煤耗 */
	long op_begin_date;	/* 投运日期 */
	long op_stop_date;	/* 停运日期 */
	long commercial_begin_date;	/* 商运日期 */
	long effective_date;	/* 生效日期 */
	long expiration_date;	/* 失效日期 */
	long update_time;	/* 信息更新时间 */
	int is_agc_flag;	/* 是否Agc机组 */
	
}STA_GN_REG_OPS;



void MainWindow::MapforeachVec()
{	//sta_participantgr_regInit_vec;
// if 0 这个地方是可以的
	map<string,STA_PA_REG_OPS>  paMap;
	//遍历市场成员记录 构造市场成员的编码和市场成员结构体的映射map
	for(int indexpa=0;indexpa<sta_pa_regInit_vec.size();indexpa++)
	{
		paMap.insert(pair<string, STA_PA_REG_OPS>(sta_pa_regInit_vec[indexpa].tag_phy, sta_pa_regInit_vec[indexpa]));  

		//paMap.insert(pair<string, sta_pa_regInit_vec>(sta_participantgr_regInit_vec[indexpa].tag_phy, sta_participantgr_regInit_vec[indexpa]));  
	
	}
	// cout<<"group_phy"<<"   "<< sta_gr_regInit_vec[index].tag_phy <<endl;
// if 0  这个地方是可以的
	//map<string,vector<STA_PA_REG_OPS> >  gr_paMap;
	//遍历发电集团和市场成员关联关系记录,构造发电集团编码和市场成员结构体的映射map
	for(int indexParticipant =0;indexParticipant<sta_participantgr_regInit_vec.size();indexParticipant++)
	{   try{
		 cout<<"group111_phy"<<"   "<< sta_participantgr_regInit_vec[indexParticipant].gengroup_phy <<endl;
		
		map<string,vector<STA_PA_REG_OPS> >::iterator gr_paMapIteFor;
		gr_paMapIteFor = gr_paMap.find(sta_participantgr_regInit_vec[indexParticipant].gengroup_phy);
		map<string,STA_PA_REG_OPS>::iterator  paMapIte;
	 	paMapIte=paMap.find(sta_participantgr_regInit_vec[indexParticipant].participant_phy);
		if(gr_paMapIteFor != gr_paMap.end())
		{
			gr_paMapIteFor->second.push_back(paMapIte->second);
			cout<<"old_pa_vec = " << gr_paMapIteFor->second.size()<<endl;
		}
		else{
			vector <STA_PA_REG_OPS> pa_vec;
			pa_vec.push_back(paMapIte->second);//这个地方是结构体变量
			gr_paMap.insert(pair<string, vector<STA_PA_REG_OPS> >(sta_participantgr_regInit_vec[indexParticipant].gengroup_phy, pa_vec));  
		}
		
	}
	catch(std::bad_alloc)
	{
		cout<<"11111111111111111111111111111111111111111111"<<endl;
	}
		//pa_vec.clear();
		
			 cout<<"gr_paMap"<<"      "<<gr_paMap.find(sta_participantgr_regInit_vec[indexParticipant].gengroup_phy)->second.size()<<endl;
			 cout<<"gr_paMap" << gr_paMap.size()<<endl;
	}
// if 0  这个地方是不可以的
#if 0
	cout<<"gr_paMap   11111"<<"      "<<gr_paMap.size()<<endl;
	pa_gn_Map.clear();
	cout<<"pa_gn_Map"<<"   "<< pa_gn_Map.size()<<endl;
	//map<string,vector<STA_GN_REG_OPS> >  pa_gn_Map;
	//遍历发电机组记录,构造市场成员编码和发电机组结构体的映射map
	for(int indexGn =0;indexGn<sta_gn_regInit_vec.size();indexGn++)
	{
		cout<<"plant_phy"<<"   "<< sta_gn_regInit_vec[indexGn].participant_id <<endl;
		vector <STA_GN_REG_OPS> gn_vec;
		
		map<string,vector<STA_GN_REG_OPS> >::iterator  pa_gn_MapTteFor;
		try{
			pa_gn_MapTteFor = pa_gn_Map.find(sta_gn_regInit_vec[indexGn].participant_id);
			if(pa_gn_MapTteFor != pa_gn_Map.end())
			{
				gr_paMapIteFor->second.push_back(paMapIte->second);
			    cout<<"old_pa_vec = " << gr_paMapIteFor->second.size()<<endl;
				gn_vec=pa_gn_MapTteFor->second;
			}
			cout<<"gn_vec***"<<"      "<<gn_vec.size()<<endl;
			gn_vec.push_back(sta_gn_regInit_vec[indexGn]);
			if(pa_gn_MapTteFor == pa_gn_Map.end())
			pa_gn_Map.insert(pair<string, vector<STA_GN_REG_OPS> >(sta_gn_regInit_vec[indexGn].participant_id, gn_vec));
		}
		catch(std::bad_alloc){
			cout<<"3333333333333333333333333333333333333333333333"<<endl;
		}
	
	}
	cout<<"pa_gn_MapTteFor   11111"<<"      "<<pa_gn_Map.size()<<endl;
	
#endif	

	cout<<"gr_paMap   11111"<<"      "<<gr_paMap.size()<<endl;
	pa_gn_Map.clear();
	cout<<"pa_gn_Map"<<"   "<< pa_gn_Map.size()<<endl;
	//map<string,vector<STA_GN_REG_OPS> >  pa_gn_Map;
	//遍历发电机组记录,构造市场成员编码和发电机组结构体的映射map
	for(int indexGn =0;indexGn<sta_gn_regInit_vec.size();indexGn++)
	{
		cout<<"plant_phy"<<"   "<< sta_gn_regInit_vec[indexGn].participant_id <<endl;
		
		
		map<string,vector<STA_GN_REG_OPS> >::iterator  pa_gn_MapTteFor;
		try{
			pa_gn_MapTteFor = pa_gn_Map.find(sta_gn_regInit_vec[indexGn].participant_id);
			if(pa_gn_MapTteFor != pa_gn_Map.end())
			{
				
				pa_gn_MapTteFor->second.push_back(sta_gn_regInit_vec[indexGn]);
				cout<<"old_gn_vec = " << pa_gn_MapTteFor->second.size()<<endl;
			}
			//cout<<"gn_vec***"<<"      "<<gn_vec.size()<<endl;
			//gn_vec.push_back(sta_gn_regInit_vec[indexGn]);
			else
			{
				vector <STA_GN_REG_OPS> gn_vec;
				gn_vec.push_back(sta_gn_regInit_vec[indexGn]);
				//gn_vec.push_back(pa_gn_MapTteFor->second);//这个地方用map的iterator为何不对?这个地方map是一个结构体数组
				
				pa_gn_Map.insert(pair<string, vector<STA_GN_REG_OPS> >(sta_gn_regInit_vec[indexGn].participant_id, gn_vec));
			}
		}
		catch(std::bad_alloc){
			cout<<"3333333333333333333333333333333333333333333333"<<endl;
		}
		//gn_vec.push_back(pa_gn_MapTteFor);
	    //cout<<"indexGn   11111"<<"      "<<pa_gn_MapTteFor->second.tag_phy<<endl;
		
		//gn_vec.clear();
	
		 
			 //cout<<"paMap"<<"      "<<pa_gn_Map.find(sta_gn_regInit_vec[indexGn].participant_id)->second.size()<<endl;
	}
	cout<<"pa_gn_MapTteFor   11111"<<"      "<<pa_gn_Map.size()<<endl;
	

	
}

上述代码运行时出现了抛出std::bad_alloc,内存分配失败错误。使用try-catch方法定位bad_alloc的发生地。

在使用map find函数的时候,要进行判断

if(pa_gn_MapTteFor != pa_gn_Map.end())
            {
                
                pa_gn_MapTteFor->second.push_back(sta_gn_regInit_vec[indexGn]);
               
            }
     
            else
            {
                vector <STA_GN_REG_OPS> gn_vec;
                gn_vec.push_back(sta_gn_regInit_vec[indexGn]);
                pa_gn_Map.insert(pair<string, vector<STA_GN_REG_OPS> >(sta_gn_regInit_vec[indexGn].participant_id, gn_vec));
            }

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值