2017-09-08 4 views
0

これはこのウェブサイトで最初の質問です、私は獲得したポイントで注文したい、チームのランキング、間違いはありますが、短絡は機能しません。 私はTeam.hオブジェクトのソートベクトルが動作しません

あなたの助けがこの問題に

を克服したい

class Team 
{ 
private: 
    std::string t_name; 
    int t_rank; 

public: 
    int t_points; 
    Team(std::string name); 
    ~Team(); 
    void win(); 
    void show(std::ostream &Flux)const; 
}; 
std::ostream& operator<<(std::ostream &Flux, Team const &B); 
bool operator<(Team const& A,Team const& B); 

Team.cpp

Team::Team(string name): t_name(name), t_points(0) {} 

void Team::win() 
{ 
    t_points+=3; 
} 

void Team::show(std::ostream &Flux)const 
{ 
    Flux << t_name; 
} 

std::ostream& operator<<(std::ostream &Flux, Team const &B) 
{ 
    B.show(Flux); 
    return Flux; 
} 

bool operator<(Team const& A,Team const& B){ 
    return A.t_points < B.t_points; 
} 

main.cppに

int main() 
{ 
    vector <Team*> Schedule; 

    Schedule.push_back(new Team("Celtics")); //0 
    Schedule.push_back(new Team("Nets"));//1 
    Schedule.push_back(new Team("Bulls"));//2 

    Schedule[1]->win(); 
    Schedule[1]->win(); 
    Schedule[2]->win(); 

    std::sort(Schedule.begin(), Schedule.end()); 
    for(int i(0); i<Schedule.size(); i++) 
    { 
     cout << i << " - " << *Schedule[i] << endl; 
    } 

    return 0; 
} 

私は追加するには、私のファイルを編集していますあなたが与えた情報は、まだ問題に反応していないので、私はすべてを再投稿し、より多くの時間を待っていますelp

+1

ベクタのポインタが含まれている - それはおそらくポインタをソートするためにしよう - オブジェクトに –

+0

@ArtemyVysotskyが言ったように、あなたはソートしているポインタを格納;オーバーヘッドを持つ可能性のあるオブジェクトを格納したくない場合は、比較関数をソートして渡すことができます – UKMonkey

+0

私は質問が不完全であると感じます。 win()の定義は何ですか?そして、私はスケジュール[1]を2回見ます。そのうちの1つがスケジュール[0]でなければならないと思いますか?詳細を教えてください –

答えて

0

これは問題なく動作します。しかしa_privateない場合のみ:

#include <algorithm> 
#include <iostream> 
#include <vector> 

class A { 
public: 
    A(size_t const& a) : a_(a) {}; 
    ~A(){}; 

    //private:                                      
    size_t a_; 
}; 

bool operator<(A const& left, A const& right) { 
    return left.a_ < right.a_; 
} 


int main() { 
    std::vector<A*> v; 
    v.push_back(new A(10)); 
    v.push_back(new A(6)); 
    v.push_back(new A(8)); 
    for(auto const& a : v) { 
    std::cout << a->get() << std::endl; 
    } 
    std::sort(v.begin(),v.end()); 
    for(auto const& a : v) { 
    std::cout << a->get() << std::endl; 
    } 
} 

はメンバーとしてoperator<を実装し、それはあまりにも解決されるだろう:

bool operator<(A const& other) { 
    return a_ < other.a_; 
} 

その後、a_は民間することができます。

+0

私は 'bool Team :: isLower(Team const&B)const'原因 'operator <'を2つの引数をとって 'bool operator <(Team const&A、Team const&B)'と呼んでいます。 。あなたは下のポストを見ることができます。 –

1

vector<Team*>ので、店舗あなたがそうのようなoperator<(const Team*, const Team*) operatorをオーバーロードする必要がポインタ:

bool operator<(const Team* left, const Team* right) { 
    return left->whatever < right->whatever; 
} 
関連する問題