在尝试自学 STL 时,我编写了以下课程:
class Person{
public:
...
bool operator<(const Person& p) const; // sorts by weight
friend bool compareWeight(const Person &p, const int& wt); //true if wt<p.weight
friend bool compareWeight(const int& wt, const Person &p);
...
private:
int age;
int weight;
};
运算符<定义为:
bool Person::operator<(const Person& p) const{
if (weight<p.weight)
return true;
else
return false;
}
为什么这不起作用:
// get lower_bound for weight = 50
vector<Person>::iterator itr = lower_bound(v.begin(),v.end(),50,compareWeight);
它抛出:
error C2914: 'std::lower_bound':cannot deduce template argument as function argument is ambiguous
我可以使用一个重量为 50 的假人来解决这个问题,然后调用 lower_bound:
vector<Person>::iterator itr = lower_bound(v.begin(),v.end(), dummy);
但它显然不是很优雅,有人可以帮我让 compareWeight 工作吗?此外,在这种情况下,任何关于最佳方法的建议都会很棒。抱歉,请不要使用 Boost 或 C++11。