以下の構造で使用しようとしています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);
私はテンプレートの実装を調べましたが、失敗しているのは、*it
MyFoo のオブジェクトを指しているイテレータを deferenging している次の場所で、 val_
10 です。
if(*it < val_) {
...
}
なぜ機能しないのですか?定義されていないグローバルを呼び出そうとしているのoperator<
ではないかと思ったのですが、クラスメンバとして定義したので問題ありませんね。