【发布时间】:2014-02-23 13:01:17
【问题描述】:
假设我们有如下结构:
struct EMPLOYEE{
int EmpID;
int Sal;
} Stu[5];
如果满足以下条件,我们希望交换这些结构:
Stu[i].Sal < Stu[0].Sal
一种方法是交换整个结构。像这样的:
TempStu.Sal = Stu[i].Sal;
Stu[i].Sal = Stu[0].Sal;
Stu[0].Sal = TempStu.Sal;
TempStu.EmpID = Stu[i].EmpID;
Stu[i].EmpID = Stu[0].EmpID;
Stu[0].EmpID = Temp.Stu.EmpID;
这使它成为一种非常耗时的方法。 其他方法可能是使用指向 EMPLOYEE 结构的指针数组,然后仅对这些指针进行排序。我无法弄清楚如何做到这一点。
这是我的开始..
EMPLOYEE *St[5];
for(int j=0; j<5; j++) {
St[j] = &Stu[j];
}
if(Stu[i].Sal < Stu[0].Sal)
swap(St[i],St[0]);
void swap(EMPLOYEE *A, EMPLOYEE *B) {
EMPLOYEE temp = *A;
*A = *B;
*B = temp;
}
这是正确的方法吗?
【问题讨论】:
-
std::swap(Stu[i], Stu[0]); -
您使用的是 C 还是 C++?
-
@EdHeal C. 不过,在这种情况下有关系吗?逻辑应该适用于这两种情况,对吧?我是新手。
-
@K_K - 是的,这很重要 - 上面的选项适用于 C++,即不是 C
-
@EdHeal 好的。谢谢你:)