我想找到一个所有成员数据都与某些值匹配的结构。
我做了一个小程序如下:
#include <iostream>
#include <vector>
using namespace std;
struct vlan {
int vlanId;
bool status;
};
vector<vlan> vlanTable;
int main(){
vlan tmp;
tmp.status = true;
tmp.vlanId = 1;
vector <vlan>::iterator flag = find(vlanTable.begin(), vlanTable.end(), tmp);
if ( flag != vlanTable.end()){
cout<<"found"<<endl;
}
else cout<<"not found"<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它返回错误为:模板参数推导/替换在查找函数处失败。
有人可以帮助我吗?
==
您需要为您的班级提供运算符vlan
:
struct vlan {
int vlanId;
bool status;
bool operator==(const vlan& rhs) const {
return (vlanId == rhs.vlanId) && (status == rhs.status);
}
};
Run Code Online (Sandbox Code Playgroud)
另外,正如评论中所述,您应该#include <algorithm>
(对于 的定义std::find
);某些编译器可能会隐式包含其他标头中的此内容,但不要依赖于此。
请注意,根据aschepler的评论,如果您有一个符合 C++20(或更高版本)标准的编译器,您可以operator==
为您的vlan
类定义默认值:
struct vlan {
int vlanId;
bool status;
bool operator==(const vlan& rhs) const = default; // C++20
};
Run Code Online (Sandbox Code Playgroud)
对于您的vlan
结构,这将执行与上面定义的“显式”版本完全相同的比较。来自cppreference(或C++20 标准草案本身):
默认相等比较
类可以定义
operator==
为默认类,返回值为bool
。这将按照声明顺序生成每个基类和成员子对象的相等比较。如果两个对象的基类和成员的值相等,则两个对象相等。如果在声明顺序中较早的成员或基类中发现不等式,则测试将短路。
在 C++ 中,结构体默认不生成比较运算符。您需要编写自己的:
struct vlan {
int vlanId;
bool status;
bool operator==(const vlan& v) const
{
return vlanId == v.vlanId; // or another approach as above
}
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
116 次 |
最近记录: |