c++ - 而不是这么多 if 语句,我想要一个逻辑,我可以用一个语句或优化的方式来做到这一点
问题描述
我有一个结构向量vector<S> sData
,我的结构包含 5 个元素(姓名、年龄、技术、项目、语言)
用户可以输入名称,它应该输出与该名称和其他元素相同的结构。
我的问题是用户只能输入其中两个,它应该只检查那些像用户可以输入年龄和语言的人,它应该输出具有相同年龄和语言的人的列表。如果您想象您可以编写如此多的 if 语句,那么它将给出正确的输出,因为您有 5 个元素,并且用户可以选择其中的 5 个 4 并且他可以随机输入其中的 3 或 4 个,我的程序应该理解这个逻辑。
在我的代码中,我使用 Qt 小部件应用程序编写。当用户没有输入任何字符串(名称、技术、项目、费率)时,默认值为 NULL,年龄为 -1。
struct S
{
QString name;
int age;
QString techs;
QString projects;
QString rate;
};
QVector<S> sData;
QVector<int> indexData;
//this is how i did for the name
indexData.clear();
if(searchName!=NULL)//i don't want to write this if for name and age ||
// name and tech ... then age and tech etc.
{
for(int i=0;i<sData.count();++i)
{
if(searchName==sData[i].name)
{
indexData.push_back(i);
}
}
}
解决方案
这有帮助吗?
struct S
{
QString name;
int age;
QString techs;
QString projects;
QString rate;
};
QVector<S> sData;
QVector<int> indexData;
int main() {
searchName = ...;
searchAge = ...;
searchTechs = ...;
...
auto it = std::find_if(std::begin(sData), std::end(sData),
[&searchName, &searchAge, &searchTecs, ...](const S& s)
{
bool eq = true;
if (searchName)
eq &= (searchName == s.name);
if (searchAge)
eq &= (searchAge == s.age);
if (searchTechs)
eq &= (searchTechs == s.techs);
....
return eq;
}
if (it == std::end(sData))
std::terminate(); //element not found
// *it is the desired element
}
或者如果你想找到每个匹配的元素
int i = 0;
for (const S& s : sData) {
bool eq = true;
if (searchName)
eq &= (searchName == s.name);
if (searchAge)
eq &= (searchAge == s.age);
if (searchTechs)
eq &= (searchTechs == s.techs);
....
if (eq)
indexData.push_back(i);
++i;
}
推荐阅读
- java - 如何打印出二维数组(矩阵)对象
- powershell - 在 Powershell 中比较 TICKS 时间
- php - setter函数中的PHP变量变量
- solaris - Solaris 11 将软件包组从大型服务器减少到最小服务器
- python - 在数据框中的其他列上使用应用函数的新列
- c++ - Visual Studio Code c++ 代码编译,但没有控制台输出
- javascript - Python SocketIO 应用程序不适用于 https
- c - 编译器在表达式中使用时如何记住声明的变量?
- dm-script - 通过事件监听器的方法获取一系列 STEM 图像
- machine-learning - 随着批大小的变化,学习率应该如何变化?