比较std :: lower_bound的类

时间:2018-06-20 05:37:10

标签: c++ c++11

我知道在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的答案尝试过的所有方法,并且得到了不同的错误。

1 个答案:

答案 0 :(得分:3)

问题已编辑。波纹管是编辑之前的答案。

  1. 问题包括存储指针和在比较器中使用引用:向量包含指向twoInt的指针,而classcomp也必须与指针一起使用。请参阅手册std::lower_boundstd::vector<twoInt*>::typetwoInt*-> TtwoInt*)。
  2. 另一个错误: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';
}