2013-01-13 2 views
0

작은 문제가 있습니다. 저는 현재 토너먼트 처리를위한 코드를 작성 중입니다. 팀원들을 메모리에 순서대로 유지하는 가장 좋은 방법은 목록이 될 것이라는 생각으로 나왔습니다. 이제 포인트 레코드 인 팀 클래스를 정렬하는 목록을 정렬하려고합니다. 다음은 클래스 선언의 :C++ 클래스를 포함하는 정렬 목록

#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 대신에 얻습니다. 내 실수는 어디 갔어?

도움 주셔서 감사합니다. 여기

+2

'operator <'함수는 어떻게 생겼는가? –

답변

5

개체를 복사하고, 복사본을 용기에 밀어 :

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

원본 개체를 수정할 수 있지만 컨테이너의 사본이 변경되지 않습니다 : 무엇을

t1->SetTP(15); 
+0

감사합니다! 내가 어떻게 그렇게 눈이 멀었 을까? – Theoden91