Я смущен, когда аргументы двоичной функции должны быть const T &
или T &
.О аргументах двоичной функции в C++
Может ли кто-нибудь сказать мне, почему sort(vec2.begin(), vec2.end(),cmp1());//error, why?
ошибочен, а sort(vec1.begin(), vec1.end(),cmp2());//correct
прав?
Все они имеют аргументы const T &
.
Спасибо!
struct Node{
Node(char ch, int num):ch_(ch), num_(num){ pnext_ = nullptr, pprev_ = nullptr; }
char ch_;
int num_;
Node *pnext_;
Node *pprev_;
// bool operator < (const Node &no) const { return num_ > no.num_; }//最小值优先
// bool operator > (const Node &no) const { return num_ < no.num_; }//最大值优先
};
struct cmp0{
bool operator() (Node * &p1, Node * &p2) const
{
return p1->num_ > p2->num_;
}
};
struct cmp1{
bool operator()(const Node * &p1, const Node * &p2) const
{
return p1->num_ > p2->num_;
}
};
struct cmp2{
bool operator()(const Node &p1, const Node &p2) const
{
return p1.num_ > p2.num_;
}
};
struct cmp3{
bool operator()(Node &p1, Node &p2) const
{
return p1.num_ > p2.num_;
}
};
int main(int argc, char *argv[])
{
vector<Node> vec1;
vector<Node*> vec2;
sort(vec1.begin(), vec1.end(),cmp2());//correct
sort(vec1.begin(), vec1.end(), cmp3());//correct
sort(vec2.begin(), vec2.end(), cmp0());//correct
sort(vec2.begin(), vec2.end(),cmp1());//error, why?
}