unordered_map<int,int>road2index,cross2index,car2index,index2road,index2cross,index2car;
//为了和练习地图id一致
void ReOrderData(){
/***建立id映射关系***/
for(int i=0;i<road_num;i++){
int roadid = roadorigin[i][0];
int index = i + RoadIdShift;
//printf( "roadid %d,index %d\n",roadid,index);
road2index.insert({roadid,index});
index2road.insert({index,roadid});
}
// cross2index.insert({-1, -1});
// index2cross.insert({-1, -1});
for(int i=0;i<cross_num;i++) {
int crossid = crossorigin[i][0];
if (crossid != -1) {
int index = i + 1;
//printf( "crossid %d,index %d\n",crossid,index);
cross2index.insert({crossid, index});
index2cross.insert({index, crossid});
}
else continue;
}
for(int i=0;i<car_num;i++){
int carid = carorigin[i][0];
int index = i + CarIdShift;
//printf( "carid %d,index %d\n",carid,index);
car2index.insert({carid,index});
index2car.insert({index,carid});
}
/***进行id映射****/
for(int i=0;i<road_num;i++){
road[i][0] = road2index[roadorigin[i][0]]; //roadid
road[i][4] = cross2index[roadorigin[i][4]]; //from
road[i][5] = cross2index[roadorigin[i][5]]; //to
road[i][6] = roadorigin[i][6]; //duplex
for(int j=1;j<4;j++){ //length speed channel
road[i][j] = roadorigin[i][j];
}
//printf("roadid:%d length:%d speed:%d channel:%d from:%d to:%d duplex:%d\n",road[i][0],road[i][1],road[i][2],road[i][3],road[i][4],road[i][5],road[i][6]);
}
for(int i=0;i<cross_num;i++){ //crossid
cross[i][0] = cross2index[crossorigin[i][0]];
//printf("cross%d ",i);
for(int j=1;j<5;j++) {
int roadid = crossorigin[i][j];
if (roadid != -1) { //-1不变
// if(!road2index[roadid]) {
// printf("cross %d road %d", i, roadid);
// exit(EXIT_FAILURE);
// }
cross[i][j] = road2index[roadid]; //roadid
}
else{
cross[i][j]=-1;
}
//printf("road %d",cross[i][j]);
}
//printf("\n");
}
for(int i=0;i<car_num;i++) {
car[i][0] = car2index[carorigin[i][0]]; //carid
car[i][1] = cross2index[carorigin[i][1]]; //crossid
car[i][2] = cross2index[carorigin[i][2]]; //crossid
car[i][3] = carorigin[i][3]; //speed
car[i][4] = carorigin[i][4]; //plantime
car[i][5] = carorigin[i][5]; //priority
car[i][6] = carorigin[i][6]; //preset
//printf("carid:%d crossid:%d crossid:%d speed:%d plantime:%d priority:%d preset:%d\n",car[i][0],car[i][1],car[i][2],car[i][3],car[i][4],car[i][5],car[i][6]);
}
for(int i=0;i<presetAnswer_num;i++){
presetAnswer[i][0] = car2index[presetAnswerorigin[i][0]]; //carid
presetAnswer[i][1] = presetAnswerorigin[i][1]; //plantime
for(int j=2;j<NumOfLongestPath;j++) {
int roadid = presetAnswerorigin[i][j];
if(roadid==0){
break;
}
else{
presetAnswer[i][j] = road2index[roadid];
}
}
}
// 调试
// for(int i=0;i<presetAnswer_num;i++){
// printf("carid:%d plantime:%d ",presetAnswer[i][0],presetAnswer[i][1]);
// for(int j=2;j<NumOfLongestPath;j++) {
// int roadid = presetAnswer[i][j];
// if(roadid==0){
// break;
// }
// else{
// printf("roadid:%d ",roadid);
// }
// }
// printf("\n");
// }
};
利用unordered_map<int,int>road2index,cross2index,car2index,index2road,index2cross,index2car;
目的是将从txt读取的int变量对应的绑定在一起,起到相互索引查找的功能。
具体使用看上面代码