有两个重载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<
其参数为value。这会产生不必要的副本。您需要更改它以引用它们const
.