我有一个std::vector<StudentGradeInfo> gradebook;
类的向量StudentGradeInfo
对象。 StudentGradeInfo
类包含以下成员变量:
std::string studentName;
int studentID;
std::string major;
我需要做的是重载==运算符,以比较来自用户的ID
输入并将其与向量studentID
中对象的std::vector<StudentGradeInfo> gradebook;
成员变量进行比较。
我将如何遍历向量以比较ID?这可能是非成员函数,因为它正在将int变量与对象的成员函数进行比较,但是我不知道该怎么做。
答案 0 :(得分:1)
如果您绝对必须制作一个超载的operator==
,我想您可以这样做。
bool operator==(const StudentGradeInfo& sgi, int id) {
return sgi.studentID == id;
}
std::vector<StudentGradeInfo> gradebook;
int id_to_find=1234;
for(auto& sgi : gradebook) {
if(sgi==id_to_find) {
//...
}
}
答案 1 :(得分:0)
我想您想遍历向量以找到具有特定ID的studentGrandeInfo对象。通过将std::find_if
与lambda函数一起使用以进行适当的比较,您可以轻松完成此操作。代码如下:
int toFind = 4219; // some ID
auto it = std::find_if(
gradebook.begin(), gradebook.end(),
[&toFind](const StudentGradeInfo& x) { return x.studentID == toFind;});
在您的情况下,由于studentID
似乎是一个“唯一键”,因此我将使用数据结构std::map<int, StrudentGradeInfo>
。
重载运算符==
就像gsamars所指出的那样,在某种程度上是不切实际的,因为它意在比较两个相同类型的对象(而不是一个int对象)。请参见以下代码对此进行说明:
struct StudentGradeInfo {
std::string studentName;
int studentID;
bool operator==(const StudentGradeInfo& c) const {
return c.studentID == studentID;
}
};
int main() {
std::vector<StudentGradeInfo> gradebook {
{ "john", 123 },
{ "max", 345 }
};
StudentGradeInfo aNewOne { "sepp", 345 };
auto it = find(gradebook.begin(),gradebook.end(),aNewOne);
if (it == gradebook.end()) {
cout << "345 does not exist" << endl;
} else {
cout << "345 already exists" << endl;
}
}