在结构C++向量中使用find_if和remove_if
Use find_if and remove_if in a vector of struct C++
我有一个程序,其结构中充满了不同人的信息。和一个矢量人,有了它。
struct Person
{
std::string fName;
std::string lName;
float length;
std::string nSignature;
bool operator==(const Person& m) const {
return ((m.fName == fName) && (m.lName == lName) && (m.length == length) && (m.nSignature == nSignature));
}
};
现在我要做的是,使用find_if并搜索结构中的nSignature。如果是,则打印出与其连接的所有元素。
例:
名字: 约翰姓氏: 多伊长度:1,78米签名:约赫多
现在,如果我搜索johdoe,并且找到了它,我想打印出与签名johdoe相关的所有详细信息(如abow(。
但这不是现在的主要问题,主要问题是我无法让我的搜索工作。
void searchName(vector<Person> &persons)
{
string nameToFind;
cout << "Search" << flush;
cin >> nameToFind;
auto findIt = find_if(persons.begin(), persons.end(), [&nameToFind](Person& person) {
return person.nSignature == nameToFind;
});
if (findIt != persons.end())
cout << findIt << endl;
}
它找不到任何东西,也不会返回任何东西。
我是否误解了find_if和运算符的使用?
你的代码应该可以工作,并且会找到第一个正确的签名。
唯一的问题是您需要取消引用迭代器,并且还需要重载类的运算符<<
。
cout << *findIt << endl;
或者,如果您不想超载,则可以明确列出您想要的内容
cout << findIt->fName << " " << findIt->lName << endl;
像这样重载,那么它会很好地工作。
ostream& operator<<(ostream& os, const Person& p)
{
os << p.fName << " " << p.lName << " " << p.length << " " << p.nSignature << endl;
return os;
}
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 为什么 SearchBack 中的 if (find == A[i]) 除了第一次之外没有给出 true?在调试时,除了第一次之外显然不起作用