非相序嵌套数据结构 C++

aphabetical order nested data structure c++

本文关键字:数据结构 C++ 嵌套      更新时间:2023-10-16

我正在尝试让我的代码以更有效的方式对嵌套数据结构的元素进行非相排序。这是我的一段代码:

 struct famous {
     string name;
     string emp;
     int proes;
     int mins;
     string mit;
 };
 struct personal {
     famous per[500];
     int np;
 };
 void delete(personal & p, int ndx){
     int mid = p.np;
     for (int i=ndx; i<mid-1; i++){
         p.per[i].name = p.per[i+1].nom;
         p.per[i].emp = p.per[i+1].emp;
         p.per[i].mins = p.per[i+1].mins;
         p.per[i].mit = p.per[i+1].mit;
     }
     p.np = mid-1;
  }
  void sort(personal & p){
      string tmp;
      int pers;
      personal vtmp;
      pers = p.np;
      tmp = p.per[0].name;
      for (int pos=0; pos<pers; pos++){
          for (int ndx=1; ndx<p.np; ndx++){
              if (tmp>p.per[ndx].name){tmp=p.per[ndx].name;}
          }
          vtmp.per[pos] = p.per[ndx]; //line 107
          deletePers(p,ndx);
          tmp = p.per[0].name;
      }
  }

当我尝试编译代码时出现问题,我得到这个:

D:\main.cpp|107|错误:"ndx"的名称查找已更改为 ISO "for"范围 [-fallowive]|

我该如何解决这个问题?

提前谢谢你!

试试这个函数

void sort(personal & p){
      int ndx =1;  // declare ndx at the starting of sor function
      string tmp;
      int pers;
      personal vtmp;
      pers = p.np;
      tmp = p.per[0].name;
      for (int pos=0; pos<pers; pos++){
          for (ndx=1; ndx<p.np; ndx++){  // remove int here
              if (tmp>p.per[ndx].name){tmp=p.per[ndx].name;}
          }
          vtmp.per[pos] = p.per[ndx]; //line 107
          deletePers(p,ndx);
          tmp = p.per[0].name;
      }
  }

当您使用for (int ndx=1; ndx<p.np; ndx++){

ndx的范围将仅保留在 for 循环内,因此无法在 for 循环外部使用它。
因此,最好在循环外声明ndx

 for (int pos=0; pos<pers; pos++){
      for (int ndx=1; ndx<p.np; ndx++){
          if (tmp>p.per[ndx].name){tmp=p.per[ndx].name;}
      }
 vtmp.per[pos] = p.per[ndx];//line 107

ndx的范围不在 for 循环之外。在 for 之外声明它。

同时重命名您的delete()函数,因为delete是保留的,并且

   p.per[i].name = p.per[i+1].nom; //should be per[i+1].name