【发布时间】:2014-06-19 14:24:59
【问题描述】:
我正在尝试将std::equal_range 与下面的结构一起使用我有编译错误说error: no match for ‘operator<’ 。
struct MyFoo {
int v_;
string n_;
bool operator<(int v) const
{ return v_ < v;}
};
vector<MyFoo> data;
// data is sorted by int v_
typedef vector<MyFoo>::iterator Ptr;
std::pair< Ptr, Ptr > pr = std::equal_range(data.begin(), data.end(), 10);
我已经查看了模板 implementationatino,失败的是以下*it 推迟指向 MyFoo 对象的迭代器,val_ 是 10。
if(*it < val_) {
...
}
为什么它不起作用?我想可能是因为它试图调用未定义的全局operator< ,但由于我将它定义为不应该成为问题的类成员,不是吗?
【问题讨论】:
-
bool operator(int v) const- Umm -
错字..修复了帖子..错误真的是那个...
-
当然
someMyFoo < someInt可以,但someInt < someMyFoo不行。 -
..所以最好在这两种情况下都有一个全局运算符...我很困惑,因为我只阅读了 lower_bound 的代码,而还有 upper_bound 需要相反的方式...
-
要详细说明 chris 的评论:您需要一个
bool operator < (int i, MyFoo &f)。
标签: c++ algorithm stl equal-range