我有一个包含两个值的人物结构 - 第一个名字和第一个名字。
这些人物结构有一个矢量。
我需要搜索Vector以找到匹配第一个首字母的第一个人,并从该Struct中检索第一个名字。
我的研究强调需要为Person Struct使用重载运算符,但我需要一些指导。
注意:只能使用Vector和find()算法。无法使用Boost。
#include <stdio.h>
#include <iostream>
#include <stdexcept>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct person
{
char firstInitial;
string firstName;
person(const char fi, const string fn)
{
firstInitial = fi;
firstName = fn;
};
char getInitial()
{
return firstInitial;
};
string getName()
{
return firstName;
};
bool operator==(const person& l, const person& r) const
{
return l.firstInitial == r.firstInitial;
}
};
int main (int argc, char *argv[])
{
vector<person> myvector;
vector<person>::iterator itr;
myvector.push_back(person('j', "john"));
myvector.push_back(person('s', "steve"));
myvector.push_back(person('c', "candice"));
itr = find (myvector.begin(), myvector.end(), itr->getInitial() == 's');
if (itr != myvector.end())
cout << "First Name: " << itr->getName() << '\n';
else
cout << "NOT Found" << '\n';
}
答案 0 :(得分:0)
operator==
成员函数只接受一个参数,而不是两个参数。它的工作是将this
与该类的另一个实例进行比较,该实例作为单个参数传递。
此外,std::find
的第三个参数不是布尔值,而是要在要搜索的序列中查找的对象的实例。或者,可以将lambda作为第三个参数提供给std::find_if
。
答案 1 :(得分:0)
1. operator==()
应该是二元函数。如果您希望它是成员函数,则应该使用一个参数,例如:
bool operator==(const person& r) const
{
return firstInitial == r.firstInitial;
}
或使其成为非成员函数(将其移出类声明):
bool operator==(const person& l, const person& r)
{
return l.firstInitial == r.firstInitial;
}
2. std::find
期望其第三个参数是要比较的值,您可以将其更改为:
itr = find (myvector.begin(), myvector.end(), person('s', ""));