C++如何判断personID是否存在于std::vector<customer>类型的my_customers
C++判断personID是否存在于my_customers的解决方案
错误原因
你编写的!(personID : my_customers)不符合C语法,C原生不支持这种判断元素是否在容器内的简写语法,需要借助标准库算法实现查找逻辑。另外注意你代码里的汤剩余数量变量名出现了numBowlsSoupLeft和numbBowlsSoupLeft两个写法,需要统一为你实际定义的变量名,避免后续编译报错。
实现步骤
1. 引入依赖头文件
在代码文件顶部引入算法库头文件:
#include <algorithm>
2. 核心查找逻辑
假设你的customer结构体中存储用户ID的成员名为id(如果你的结构体里该成员叫其他名字,替换成实际名称即可),使用std::find_if实现查找:
// 遍历my_customers查找id匹配personID的元素 auto it = std::find_if(my_customers.begin(), my_customers.end(), [personID](const customer& c) { return c.id == personID; }); // 迭代器等于end()说明没有找到对应id的用户,即personID不存在 if (it == my_customers.end() && numBowlsSoupLeft > 0) { // 执行发汤逻辑 my_customers.push_back(customer{personID, 1}); // 按你结构体的初始化规则调整写法 numBowlsSoupLeft--; return BOWL_OF_SOUP; }
完整getSoup方法参考
#include <algorithm> // 注意写在文件头部,不要放在函数内部 int Soupline::getSoup(int personID) { if (numBowlsSoupLeft == 0) { return OUT_OF_SOUP; } auto customer_it = std::find_if(my_customers.begin(), my_customers.end(), [personID](const customer& c) { return c.id == personID; // 替换为你customer结构体中存储ID的实际成员名 }); // 新用户逻辑 if (customer_it == my_customers.end()) { my_customers.emplace_back(personID, 1); // 如果customer没有对应构造函数,换成结构体列表初始化写法 numBowlsSoupLeft--; return BOWL_OF_SOUP; } // 此处可以补充老用户的业务逻辑,按需求调整 // 示例:老用户也可以领汤的话就写: // customer_it->numbBowlsSoup += 1; // numBowlsSoupLeft--; // return BOWL_OF_SOUP; // 替换为你实际需要的默认返回值 return 0; }
内容的提问来源于stack exchange,提问作者ihatecplusplus123
相关产品推荐
相关产品推荐

