按对象数据成员属性搜索对象矢量

时间:2014-04-01 11:10:08

标签: c++ c++11

我正在编写一个Jukebox模拟器,我试图按专辑标题搜索Album对象的向量,并返回索引以用于其他功能。该功能可用于许多不同的事情,如删除相册,打印相册等。

当函数与要搜索的数据成员属于同一个Class时,我已经在之前的应用程序中使用它。但是,由于某些原因,我无法使用getter来使用它。无论我输入什么作为搜索关键字,idx都会返回3,尽管向量只包含索引0,1和2(现在只有3个专辑)。 lambda函数似乎能够通过使用getAlbum() - getter访问数据,但不知何故比较不起作用。

我的方法可能完全错误,我会感谢任何正确方向的指示,或建议如何使用其他技术实现所需的结果。

int Jukebox::findAlbumIdx(string key)
{
    // Get search predicate
    auto it = find_if(albvec.begin(), albvec.end(), [key](Album const &a)
    {
        return (a.getAlbum() == key);
    });

    int idx = it - albvec.begin();

    return idx;
}

void Jukebox::delAlbum()
{
    cin.get();
    string key;

    cout << "Input title of album to delete: ";
    getline(cin, key);

    int idx = findAlbumIdx(key);

    if(idx > albvec.size() - 1)
        cout << "No hits." << endl;
    else
        albvec.erase(albvec.begin() + idx);
}

getAlbum只是一个简单的内联getter:

string getAlbum() const {return album_title;}

根据Jonathan Wakely的建议,在lambda中添加std::cout << a.getAlbum() << " == " << key << std::endl;输出是这样的:

Input title of album to delete: Abbey Road
 == Abbey Road
 == Abbey Road
 == Abbey RoadLonely Hearts Club Band
No hits.

显然,吸气剂实际上并没有太多用于比较。不确定为什么它只能获得最后一个条目并且在比较的右侧。

如果我将其添加到上面的任何功能中,它会正确显示相册标题。在调用findAlbumIdx(key);之前以及findAlbumIdx函数内部之前,向量似乎没问题。

for(unsigned int i = 0; i < albvec.size(); ++i)
    cout << albvec[i].getAlbum() << endl;

1 个答案:

答案 0 :(得分:0)

读取到要搜索的向量中的原始播放列表文件在使用dos2unix(因为我正在运行Linux)进行转换后使用了dos换行符,并且我推测了很多其他的东西,工作正常。

我认为在将文件读入矢量时修剪换行符将是更正确的方法。