0

小さな問題があります。私は現在、トーナメント処理用のコードを書いていますが、チームを順番に記憶しておくための最良の方法はリストになるという考えに至りました。今、ポイントレコードを含むチームクラスを含むリストをソートしようとしています。クラス宣言は次のとおりです。

#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 ではなく、同じものを取得します。私の間違いはどこですか?

手伝ってくれてありがとう。

4

1 に答える 1

5

ここで、オブジェクトがコピーされ、そのコピーがコンテナにプッシュされます。

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

ここで元のオブジェクトを変更しますが、コンテナ内のコピーは変更されません。

t1->SetTP(15);
于 2013-01-13T13:54:21.427 に答える