线性搜索类对象数组

Posted

技术标签:

【中文标题】线性搜索类对象数组【英文标题】:linear searching an array of class objects 【发布时间】:2013-01-22 21:05:17 【问题描述】:

我设置了一个线性搜索算法来搜索它工作的类对象数组,但输出不匹配,当我在数组中搜索特定名称时,会找到数组中的第一个和第三个值,但是未找到第二个值。

以下是我的代码,感谢您的帮助。

int linsearch(string val)

    for (int j=0; j <= 3; j++)
    
        if  (player[j].getLastName()==val)
         return j ;         
    
        return 1 ;
   


void showinfo()

    string search;
    int found ;


    cout << "Please Enter The Player's Last Name : " ;
    cin >> search ;

    found=linsearch(search);

    if (found==1)
    
        cout << "\n There is no player called " << search ;
    
    else
    
        cout << "\n First Name : " << player[found].getFirstName() << "\n" << "Last Name : " << player[found].getLastName() <<
            "\n" << "Age : " << player[found].getAge() << "\n" << "Current Team : " << player[found].getCurrentTeam() << 
            "\n" << "Position : " << player[found].getPosition() << "\n" << "Status :  " << player[found].getStatus()  << "\n\n";
    

    cin.get() ;

    menu() ;


【问题讨论】:

【参考方案1】:

因为您将第二个元素的索引用作“未找到”代码:

int linsearch(string val)

    for (int j=0; j <= 3; j++)
    
        if  (player[j].getLastName()==val)
         return j ;         
    
        return 1 ;
   

你应该返回一些不能作为索引的东西,例如-1。或者更好的是,使用std::find_if。

【讨论】:

我可以向 OP 建议他使用 -1 而不是 1。【参考方案2】:

第二个元素的索引与标记“未找到”条件的值相同。

使用-1 之类的无效索引来标记“未找到”条件:

int linsearch(string val)

    for (int j=0; j <= 3; j++)
    
        if  (player[j].getLastName()==val)
         return j ;         
    

    return -1;

然后在调用函数中检查-1

if (found==-1)

    cout << "\n There is no player called " << search ;

【讨论】:

【参考方案3】:

做这样的事情...如果没有找到返回任何其他整数,如'-1'

int linsearch(string val)

for (int j=0; j <= 3; j++)

    if  (player[j].getLastName()==val)
     return j ;         

    return -1 ;
 


void showinfo()

string search;
int found ;


cout << "Please Enter The Player's Last Name : " ;
cin >> search ;

found=linsearch(search);

if (found == -1)

    cout << "\n There is no player called " << search ;


[...]

【讨论】:

以上是关于线性搜索类对象数组的主要内容,如果未能解决你的问题,请参考以下文章

对表格多数组的环回响应/将对象的嵌套数组展平为线性数组

目标 C:从类方法返回一个对象数组

线性结构--数组

使用 NSPredicate 搜索/过滤自定义类数组

前端如何优雅处理类数组对象?

存档和取消存档自定义类(有一个属性作为对象数组),总是失败