2011-08-11 4 views
1

まず、私は今まで私を助けてくれた人々に感謝したいと思います。あなたは素晴らしいです!!!!! (あなたはそれを知っていた場合のみ)要素の機能にベクトルをソートする

typedef template<class T>struct 
{ 
    T homepet_; 
    T wildpet_; 
}Animal; 

std::vector<Animal> va; 
std::sort(va.begin(),va.end(),Pred<std::string>(sort_based_on_bool_and_arg)); 

私は、ユーザーの入力がhomepet_選択した場合、それはそう
2.を昇順か降順ユーザ入力真の場合PRED(sort_based_on_bool_and_arg)は
1に基づいてベクトルをソートするために使用たいと思います私が何知らない

struct functor 
{ 
    inline bool operator()(const Animal& a, const Animal& b) const 
    { 
     return (does a come before b); 
    } 
}; 

typedef std::vector<Animal> va; 
va list; 
std::sort(list.begin(), list.end(), functor()); //call operator() on functor 
+2

私はあなたがファンクターを必要と信じています。 – Fezvez

+3

'va'は型であり、オブジェクトではありません。 – Nawaz

+0

Nawazのコメントに疑問を抱く方々のために、それ以降の質問で修正されました。 –

答えて

2

をwildpet_並べ替えられますように私はあなたがこれらの線に沿って何かを必要とすると考えていますはそうするはずですが、私はそこにはいけないと知っています。

sortは、厳密な弱い順序付けを実装するベクトルの2つのメンバ(参照先)に対してバイナリ述語をとります。バイナリ述語は、関数またはoperator()のオブジェクトのいずれかです。あなたは2つのAnimalオブジェクトを比較することができた場合は、単に機能の作成:

bool animal_less_than(const Animal &l, const Animal &r) { ... } 

を、ソートなどの呼び出し:あなたには、いくつかの追加のパラメータが必要な場合

std::sort(list.begin(), list.end(), &animal_less_than); 

は、あなたが必要です:

struct animal_less_than { 
    type_of_extra_data extra_data; 
    animal_less_than(type_of_extra_data extra_data) : extra_data(extra_data) {} 
    bool operator()(const Animal &l, const Animal &r) { ... } 
}; 

のようなコールソート:

std::sort(list.begin(), list.end(), animal_less_than(extra_data)); 

メモでは、Animalを宣言する構文が間違っています。

template <typename T> 
struct Animal { 
    T homepet_; 
    T wildpet_; 
}; 

との問題のために、それはおそらくclassいうよりstructべきであるとカプセル化する必要があります:それはする必要があります。

+0

オペレータは引数として2つの動物(const参照が望ましい)を持たなければなりません。 'Pred <....>'は意味がありません( 'functor'は述語です)。 –

+0

@Jan、私はそれを編集しました。 –

+0

@Tony the Tiger:自分の分別を助けることが適切です=) – Fezvez

1

:引数が、それはhomepet_のためにソートするか、

関連する問題