我知道在Stack Overflow上已经有人问过这个问题并回答了好几次,我已经遍历了所有答案并进行了尝试,但是似乎没有一个适合我。
#include <iostream>
#include <vector>
struct twoInt{
int a;
int b;
twoInt(int x, int y) {
a = x;
b = y;
}
};
struct classcomp{
bool operator() (twoInt* lhs, twoInt* rhs)
{return lhs->a < rhs->a;}
};
int main() {
std::vector<twoInt*> v;
v.push_back(new twoInt(1,1));
v.push_back(new twoInt(8,8));
v.push_back(new twoInt(8,8));
v.push_back(new twoInt(9,9));
twoInt* temp = new twoInt(7,7);
std::vector<twoInt*>::iterator low;
// low=std::lower_bound(v.begin(), v.end(), temp, classcomp());
// low=std::lower_bound(v.begin(), v.end(), temp, std::bind2nd(std::less<twoInt*>(), classcomp));
// low=std::lower_bound(v.begin(), v.end(), temp, [](twoInt* lhs, twoInt* rhs) -> bool { return lhs->a < rhs->a; });
std::cout << "lower_bound at position " << (low-v.begin()) << '\n';
}
主体中注释掉的三行内容是我根据Stack Overflow的答案尝试过的所有方法,并且得到了不同的错误。
答案 0 :(得分:3)
问题已编辑。波纹管是编辑之前的答案。
twoInt
的指针,而classcomp
也必须与指针一起使用。请参阅手册std::lower_bound
(std::vector<twoInt*>::type
是twoInt*
-> T
是twoInt*
)。std::lower_bound
的第三个参数也必须也是指针(T
),但是您传递了int。我建议您不要使用指针。
#include <iostream>
#include <vector>
struct twoInt{
int a;
int b;
twoInt(int x, int y) {
a = x;
b = y;
}
bool operator < (const twoInt& rhs) {
return a < rhs.a;
}
};
int main() {
std::vector<twoInt> v;
v.push_back(twoInt(1,1));
v.push_back(twoInt(8,8));
v.push_back(twoInt(8,8));
v.push_back(twoInt(9,9));
std::vector<twoInt>::iterator low;
low=std::lower_bound(v.begin(), v.end(), twoInt(9, 0));
std::cout << "lower_bound at position " << (low-v.begin()) << '\n';
}