2011-08-11 93 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)); 

我想強的鬆(sort_based_on_bool_and_arg)使用基於
1排序向量,如果用戶輸入真實是上升或下降,否則
2.如果用戶輸入選擇homepet_作爲參數,然後將其排序爲homepet_或將排序wildpet_

+2

我相信你需要仿函數。 – Fezvez

+3

'va'是一個類型,而不是一個對象。 – Nawaz

+0

對於那些納瓦茲評論感到疑惑的人來說,之後這個問題已經得到解決。 –

回答

2

我相信你需要沿着這些路線的東西:

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 
+0

操作員必須有2個動物(最好是const引用)作爲參數。 'Pred <....>'在這裏沒有意義('functor'是謂詞)。 –

+0

@Jan,我編輯它。 –

+0

@Tony the Tiger:你幫忙整理一下你自己=) – Fezvez

1

我不知道是什麼Pred應該是,但我知道它不應該在那裏。

sort對實現嚴格弱排序的向量的2(引用)成員執行二元謂詞。二元謂詞可以是一個函數,也可以是operator()的對象。如果你可以比較兩個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,應該進行封裝。