Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对向量的元素进行排序';s特征_C++ - Fatal编程技术网

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的排序是什么,所以我无法参考它。