lower_bound for vector<MyClass*>

lower_bound for vector<MyClass*>

本文关键字:MyClass gt lt for vector lower bound      更新时间:2023-10-16

我有一个简单的类:

class MyClass {
public:
    int id;
    string name;
};

我想要一个向量,该向量具有指向此类对象的指针,该对象按引用的MyClass id排序。我认为使用lower_bound会很容易,我以前使用对象的矢量(而不是指针)。对于对象,我重载了operator<,如下所示:

bool operator<(MyClass left, int right) {
    return (left.id < right);
}

然后,我使用lower_bound将新的MyClass对象插入到排序后的向量中。

vector<MyClass>::iterator low;
low = lower_bound(vectorname.begin(),vectorname.end(),id);
prP = idContainer.begin();
prP = idContainer.insert(low, newobject); 

我不知道如何用MyClass指针的矢量来做同样的事情。有人能帮我做到这一点吗?

std::lower_bound:有两个过载

template< class ForwardIt, class T >
ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T& value );
template< class ForwardIt, class T, class Compare >
ForwardIt lower_bound( ForwardIt first, ForwardIt last, const T& value, Compare comp );

第一个是用于vector<MyClass>的,默认情况下使用operator<。第二个允许使用自定义比较函数,该函数将容器中的元素作为第一个参数,将值作为第二个参数。这就是您想要用于vector<MyClass*>:的内容

std::vector<MyClass*> pvec;
auto low = std::lower_bound(pvec.begin(), pvec.end(), id,
    [](const MyClass* c, const MyClass& id) {
        return *c < id;
    });

比较采用两个不同类型的参数有点奇怪,但事实就是这样

注意:您当前的operator<通过获取参数。这会导致不必要的复制。您将希望通过引用const来更改此设置以获取它们。