C++ 包含类的排序列表

标签 c++ list sorting

我有一个小问题。我目前正在编写用于锦标赛处理的代码,我想出了一个想法,即让团队在内存中保持有序的最佳方式是列表。 现在,我正在尝试对包含点记录的包含 Team 类的列表进行排序。 这是类声明:

#include "player.h"
#include <string>

class Team {
Player** Gracz;
std::string Name;
int TP, STP;
int Total;

public:
Team();
Team(Player* gracz1, Player* gracz2, Player* gracz3, Player* gracz4, Player*     gracz5, Player* gracz6, std::string name);
~Team();

void SetTeam();
void SetTeam(Player gracz1, Player gracz2, Player gracz3, Player gracz4, Player gracz5, Player gracz6, std::string name);
void SetTP(int tp);
void SetSTP(int stp);

std::string GetTeam();
int GetTotal();
int GetTP();
int GetSTP();

bool operator<(Team& team);
bool operator>(Team& team);

void PrintTeam();
};

程序代码如下:

#include <iostream>
#include "player.h"
#include "team.h"
#include <list>
#include <string>

using namespace std;

int main(int argc, char *argv[]) {
Player *p;
Team *t1, *t2, *t3, *t4;
list<Team> x;
list<Team>::iterator it;

p=new Player("a","a","a");

t1=new Team(p,p,p,p,p,p,"A");
t2=new Team(p,p,p,p,p,p,"B");
t3=new Team(p,p,p,p,p,p,"C");
t4=new Team(p,p,p,p,p,p,"D");

x.push_back(*t1);
x.push_back(*t2);
x.push_back(*t3);
x.push_back(*t4);

cout<<"Turniej: "<<endl;
for(it=x.begin();it!=x.end();++it)
    cout<<" "<<(*it).GetTeam();
cout<<endl;

t1->SetTP(15);
t2->SetTP(4);
t3->SetTP(8);
t4->SetTP(8);
t3->SetSTP(15);
t4->SetSTP(65);

x.sort(); 

cout<<"Turniej: "<<endl;
for(it=x.begin();it!=x.end();++it)
    cout<<" "<<(*it).GetTeam();
cout<<endl;

return 0;
}

所以我想先按 TP,然后按 STP 对列表进行排序,它包含在重载运算符 < 的声明中。当我打印列表时,我在排序前得到 A、B、C、D,在排序后得到相同,而不是在排序后得到 A、D、C、B。我的错误在哪里?

感谢您的帮助。

最佳答案

这里复制对象,并将其拷贝推送到容器中:

x.push_back(*t1);
/* the same for others */

这里修改了原始对象,但是容器中的拷贝没有变化:

t1->SetTP(15);

关于C++ 包含类的排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304118/

相关文章:

python - 分割字符串并按字长排序

c++ - 需要有关此 C++ 代码的帮助

c++ - 将 typedef 函数指向另一个类中的另一个函数

c++ - 使用 C++ 编译 gSoap

python - Pandas - 迭代时重复行

python - 将字符串重新组合为 2 字符字符串列表的最佳方法

python - 如何排序(key=lambda x :) implemented behind the scene?

c++ - 如何访问安装在Docker容器上的第三方C++库?

java - 比较作为文件名一部分的两个文件之间的时间

Swift - 使用多个条件对对象数组进行排序