C++ 对向量的元素进行排序';s特征
首先,我要感谢迄今为止帮助过我的人。你太棒了!!!!!(要是你知道就好了)C++ 对向量的元素进行排序';s特征,c++,C++,首先,我要感谢迄今为止帮助过我的人。你太棒了!!!!!(要是你知道就好了) typedef模板结构 { 家养宠物; T野生宠物; }动物; std::向量va; std::sort(va.begin()、va.end()、Pred(基于bool和arg的排序)); 我想使用Pred(基于bool和arg的排序)来基于 1.如果用户输入true,则为升序或降序,否则 2.如果用户输入选择homepet作为参数,那么它将对homepet进行排序,或者将对wildpet进行排序我相信您需要以下内容:
typedef模板结构
{
家养宠物;
T野生宠物;
}动物;
std::向量va;
std::sort(va.begin()、va.end()、Pred(基于bool和arg的排序));
我想使用Pred(基于bool和arg的排序)来基于1.如果用户输入true,则为升序或降序,否则
2.如果用户输入选择homepet作为参数,那么它将对homepet进行排序,或者将对wildpet进行排序我相信您需要以下内容:
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
结构函子
{
内联布尔运算符()(常数动物&a、常数动物&b)常数
{
返回(a是否在b之前);
}
};
typedef std::向量va;
va列表;
排序(list.begin(),list.end(),functor())//对函子调用运算符()
我不知道Pred应该是什么,但我知道它不应该在那里
sort
对实现严格弱排序的向量的2个(引用)成员使用二进制谓词。二元谓词可以是带有运算符()
的函数或对象。如果您可以比较两个动物
对象,只需创建一个函数:
bool animal_less_than(const Animal &l, const Animal &r) { ... }
并调用类似于:
std::sort(list.begin(), list.end(), &animal_less_than);
std::sort(list.begin(), list.end(), animal_less_than(extra_data));
如果需要一些额外的参数,则需要:
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);
std::sort(list.begin(), list.end(), animal_less_than(extra_data));
另一方面,声明Animal的语法是错误的。应该是:
template <typename T>
struct Animal {
T homepet_;
T wildpet_;
};
模板
结构动物{
家养宠物;
T野生宠物;
};
对于这个问题,它可能应该是一个
类
而不是结构
,并且应该被封装。va
是一个类型,而不是一个对象。对于那些对纳瓦兹的评论感到疑惑的人来说,它已经在后来的问题中得到了修复。如果用户在哪里输入true?用户在哪里选择?声明Animal
的语法明显错误。在C++中,正确的语法声明结构是“代码>结构体{{…} /CODE>,不是<代码> TyPulfStult{…}动物< /代码>。虽然两者都适用于普通结构(以保持与C的兼容性),但后者不适用于模板,因为typedef不能定义模板,只能定义具体类型。纳瓦兹,对不起,这是无意的。看到你的指针后,我的反应很尴尬。谢谢你和大家的帖子。操作员必须有2个动物(最好是常量引用)作为参数。Pred
在这里毫无意义(functor
是谓词)。@Tony The Tiger:你帮助自己整理一下是合适的=)@Dalton:问题是你没有真正说明需求。您没有描述您认为基于bool和arg的排序是什么,所以我无法参考它。