c++ 多级map程序及调试

/*定义全局的map*/
map >  gr_paMap;
map >  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  paMap;
	//遍历市场成员记录 构造市场成员的编码和市场成员结构体的映射map
	for(int indexpa=0;indexpa(sta_pa_regInit_vec[indexpa].tag_phy, sta_pa_regInit_vec[indexpa]));  

		//paMap.insert(pair(sta_participantgr_regInit_vec[indexpa].tag_phy, sta_participantgr_regInit_vec[indexpa]));  
	
	}
	// cout<<"group_phy"<<"   "<< sta_gr_regInit_vec[index].tag_phy < >  gr_paMap;
	//遍历发电集团和市场成员关联关系记录,构造发电集团编码和市场成员结构体的映射map
	for(int indexParticipant =0;indexParticipant >::iterator gr_paMapIteFor;
		gr_paMapIteFor = gr_paMap.find(sta_participantgr_regInit_vec[indexParticipant].gengroup_phy);
		map::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()< pa_vec;
			pa_vec.push_back(paMapIte->second);//这个地方是结构体变量
			gr_paMap.insert(pair >(sta_participantgr_regInit_vec[indexParticipant].gengroup_phy, pa_vec));  
		}
		
	}
	catch(std::bad_alloc)
	{
		cout<<"11111111111111111111111111111111111111111111"<second.size()< >  pa_gn_Map;
	//遍历发电机组记录,构造市场成员编码和发电机组结构体的映射map
	for(int indexGn =0;indexGn gn_vec;
		
		map >::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()<second;
			}
			cout<<"gn_vec***"<<"      "< >(sta_gn_regInit_vec[indexGn].participant_id, gn_vec));
		}
		catch(std::bad_alloc){
			cout<<"3333333333333333333333333333333333333333333333"< >  pa_gn_Map;
	//遍历发电机组记录,构造市场成员编码和发电机组结构体的映射map
	for(int indexGn =0;indexGn >::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()< 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 >(sta_gn_regInit_vec[indexGn].participant_id, gn_vec));
			}
		}
		catch(std::bad_alloc){
			cout<<"3333333333333333333333333333333333333333333333"<second.tag_phy<second.size()<

上述代码运行时出现了抛出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 gn_vec;
                gn_vec.push_back(sta_gn_regInit_vec[indexGn]);
                pa_gn_Map.insert(pair >(sta_gn_regInit_vec[indexGn].participant_id, gn_vec));
            }

 

 

 

你可能感兴趣的:(Linux,c++)