lower_bound 向量<MyClass*>
lower_bound for vector<MyClass*>
我有这个简单的 class:
class MyClass {
public:
int id;
string name;
};
我想要一个向量,其中包含指向此 class 的对象的指针,该对象按引用的 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<
通过 value 获取参数。这会导致不必要的副本。您需要将其更改为参考 const
.
我有这个简单的 class:
class MyClass {
public:
int id;
string name;
};
我想要一个向量,其中包含指向此 class 的对象的指针,该对象按引用的 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<
通过 value 获取参数。这会导致不必要的副本。您需要将其更改为参考 const
.