如何在std::vector中查找对象
how find an object in std::vector
我有一个像下面这样的对象
class MyClass{
int a;
double b;
};
和
vector<MyClass> vMyClass;
然后我想在vMyClass中搜索,尝试使用算法函数:
if( std::find(vMyClass.begin(), vMyClass.end(), aiField) == vMyClass.end())
我还定义了operator==
int operator ==(Field &Left,Field &Right)
{
return memcmp(&Left,&Right,sizeof(Field));
}
或
int operator ==(Field &Right)
{
return memcmp(this,&Right,sizeof(Field));
}
但我收到一条错误消息。
1>c:Program Files (x86)Microsoft Visual Studio 9.0VCincludealgorithm(40) : error C2678: binary '==' : no operator found which takes a left-hand operand of type 'MyClass' (or there is no acceptable conversion)
1> C:Program FilesMicrosoft SDKsWindowsv6.0Aincludeguiddef.h(192): could be 'int operator ==(const GUID &,const GUID &)' [found using argument-dependent lookup]
1> c:usersshmueliandocumentsvisual studio 2008projectssrcexamplesDLgeneratorDLParser.h(85): or 'int operator ==(MyClass &,MyClass &)' [found using argument-dependent lookup]
1> c:usersshmueliandocumentsvisual studio 2008projectssrcexamplesDLgeneratorDLParser.h(70): or 'int MyClass::operator ==(MyClass &)'
1> while trying to match the argument list '(MyClass, const MyClass)'
1> c:Program Files (x86)Microsoft Visual Studio 9.0VCincludealgorithm(74) : see reference to function template instantiation '_InIt std::_Find<std::_Vector_iterator<_Ty,_Alloc>,_Ty>(_InIt,_InIt,const _Ty &)' being compiled
1> with
1> [
1> _InIt=std::_Vector_iterator<MyClass,std::allocator<MyClass>>,
1> _Ty=MyClass,
1> _Alloc=std::allocator<MyClass>
1> ]
1> c:usersshmueliandocumentsvisual studio 2008projectssrcexamplesDLgeneratorDLParser.h(108) : see reference to function template instantiation '_InIt std::find<std::_Vector_iterator<_Ty,_Alloc>,MyClass>(_InIt,_InIt,const _Ty &)' being compiled
1> with
1> [
1> _InIt=std::_Vector_iterator<MyClass,std::allocator<MyClass>>,
1> _Ty=MyClass,
1> _Alloc=std::allocator<MyClass>
1> ]
1>CommandArgParser.cpp
1>Generating Code...
它们需要是常量引用。而memcmp
真的非常糟糕——只需进行成员比较即可。
您忘记了==
运算符中的const
限定符,而且它应该返回bool
,而不是int
。只需使用这个:
bool operator ==(const Field &Left, const Field &Right)
{
return (Left.a == Right.a) && (Left.b == Right.b);
}
您有一个MyClass
的向量,但有一个用于Field
的比较运算符。你必须写一个bool operator == (const MyClass &, const MyClass &)
。
此运算符应该(如其他运算符所示)不使用memcmp
,而是执行成员比较。
在类本身中实现运算符:
class MyClass
{
public:
int a;
double b;
bool operator ==(const MyClass &Right) const
{
return (a == Right.a) && (b == Right.b); // 'this' is left
}
};
相关文章:
- 如何在 c++98 中通过特定字段在 QList 中查找对象?
- 按类型与字符串查找对象
- 查找对象属性是否位于对象向量C++中
- 查找对象向量中属性具有相同值的对象
- 在对象向量中查找对象
- C++ 在向量中查找对象并在其上调用成员函数
- C++ 在 Vector 中查找对象成员值
- 在 std 列表中查找对象并将其添加到另一个列表
- 如何在std::vector中查找对象
- OpenCV 使用具有不对应点的求解查找对象的位置
- 在向量C++中查找对象的指针
- 在 std::set 上按名称查找对象
- 在 std::set 中查找对象时出错
- 如何使用OpenCV在视频上查找对象
- 如何根据对象成员值从列表中查找对象
- 在c++中查找对象的未初始化属性
- Qt:在列表中查找对象的属性
- 在c++中,如何通过给出对象的成员来查找对象向量中的某些项
- 如何在std::vector中查找对象
- 在矢量中查找对象,具有多个要求