lower_bound for vector<MyClass*>
lower_bound for vector<MyClass*>
我有一个简单的类:
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
来更改此设置以获取它们。
相关文章:
- EASTL矢量<向量<int>>连续的
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };
- 反转C++ foo(MyClass &) vs foo(const MyClass &)
- 从 json 字符串将 QVariant 转换为 QList<MyClass>
- #include "MyClass.h" 和 #include ".myclass.h" 有什么区别
- MyClass obj = MyClass();'MyClass()'在这里指的是临时对象吗?
- 'return':无法从'const class myClass'转换为'class myClass &'
- 如何初始化 const std::vector<MyClass>
- "delete p"和"p->~MyClass()"之间的区别
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 'class MyClass' 在尝试定义静态结构实例时不会命名类型
- 注意:候选:MyClass:MyClass(const MyClass&) 错误
- C 字符串比较“祝您好运”&gt;“再见”
- std::set<myClass*>排序
- 复制构造函数语法错误:myclass 没有成员 mymember
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何通过扩展以下类型特征来删除 decltype(&MyClass::funct) 部分?
- Qt C++ - 创建 QList<Myclass> - 不是参数 'T 的有效模板类型参数
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- C 操作员&gt;&gt;与突变器过载