首先,我要感谢人们到目前为止帮助过我。你很棒!!!!! (如果只有你知道的话)
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));
我希望Pred(sort_based_on_bool_and_arg)用于根据
来排序矢量
1.如果用户输入为true,则为升序或降序
2.如果用户输入选择homepet_作为参数,那么它将对homepet_进行排序,或者它将对wildpet_
答案 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
答案 1 :(得分: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
,应该封装。