C++ 用C+对结构进行排序+;

C++ 用C+对结构进行排序+;,c++,arrays,sorting,structure,C++,Arrays,Sorting,Structure,我想用structure(我第一次使用structure)对数组进行排序。这个结构获取一些学生的名字和ID号,问题是它显示的不是名字而是其他名字(我使用dev C++) #包括 #包括 #包括 #包括 使用名称空间std; 体类型 { 长整型ID; 字符串FirstName,LastName; }我的学生[100]; 无效打印信息(学生雇员[100],内部b) { 对于(int i=0;i此代码: temp = mystudent[i].ID; mystudent[i].

我想用structure(我第一次使用structure)对数组进行排序。这个结构获取一些学生的名字和ID号,问题是它显示的不是名字而是其他名字(我使用dev C++)

#包括
#包括
#包括
#包括
使用名称空间std;
体类型
{
长整型ID;
字符串FirstName,LastName;
}我的学生[100];
无效打印信息(学生雇员[100],内部b)
{
对于(int i=0;i此代码:

  temp         = mystudent[i].ID;
  mystudent[i].ID   = mystudent[i-1].ID;
  mystudent[i-1].ID = temp;
  mystudent[i-1].FirstName=mystudent[i].FirstName;
交换
ID
,但复制
FirstName
。更糟糕的是,它对
LastName
没有任何作用

请尝试:

struct Student tempstudent = mystudent[i] ;
mystudent[i]= mystudent[i-1] ;
mystudent[i-1]= tempstudent ;
或者更好的是,使用STL

#include <utility>

std::swap(mystudent[i], mystudent[i-1]) ;
#包括
交换(mystudent[i],mystudent[i-1]);

注意,
swap
位于
中,如果您是C++11之前的版本。

您的代码只交换结构的
ID
字段。您正在分配(复制)
FirstName
字段,并且不使用
LastName
执行任何操作
可以使用
=/code>操作符直接为彼此分配结构
s:

struct Student temp = mystudent[i] ;
mystudent[i]= mystudent[i-1] ;
mystudent[i-1]= temp ;

提供一个
运算符如果这是实际的生产代码,我建议使用and-还有一个自定义运算符函数来代替小于运算符可能也有意义。我使用了woolstar下面的代码来交换名字,但现在排序不正确。谢谢大家,我的问题已经解决了。真的吗?如果你要复制我的ans嗯,至少再打一次,而不是复制粘贴。
struct Student temp = mystudent[i] ;
mystudent[i]= mystudent[i-1] ;
mystudent[i-1]= temp ;
...

struct Student {
  long long int ID;
  string FirstName,LastName;
} mystudent[100];

bool operator<(const Student& s1, const Student& s2) {
  return s1.ID < s2.ID;
}

...

int main () {
  ...
  std::sort(mystudent,mystudent+100)
  cout<<"Sorted list in ascending order:\n";
  PrintInformation(mystudent,n); 
  getch();
  return 0; 
}
...

struct Student {
  long long int ID;
  string FirstName,LastName;
} mystudent[100];

...

int main ()
{
  ...
  std::sort(mystudent, mystudent+100,
     [](mystudent const & a, mystudent const &b){return a.ID < b.ID;});

  cout<<"Sorted list in ascending order:\n";    
  PrintInformation(mystudent,n); 
  getch();
  return 0; 
}