而不是如果有那么多的逻辑,我想用一个语句或一种优化的方式就可以做到这一点

问题描述 投票:-1回答:1

我有一个结构向量sData的向量,我的结构包含5个元素(名称,年龄,技术,项目,语言)

用户可以输入名称,并且应该输出与该名称相同的结构以及其他元素。我的问题是用户只能输入其中两个,并且应该只检查那些就像用户可以输入年龄和语言一样,如果您认为您可以写这么多的if,那么它应该输出具有相同年龄和语言的人的列表,这样您就可以输出正确的信息,因为您有5个元素并且用户可以从5个中选择5个,然后随机输入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);   
        }
    }
 }
c++ qt tableview viewmodel
1个回答
0
投票

有帮助吗?

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
}
© www.soinside.com 2019 - 2024. All rights reserved.