试图在类

时间:2017-11-09 00:37:53

标签: c++

首先请原谅我的英语,不是我的母语。 好吧,所以在大学里,他们只是用c ++教我矢量。我正在做一个项目,我有一个包类和一个饰品类。 我正在尝试在一个函数中搜索包含是否存在某些饰品,如果是,则返回饰品的索引,如果不是,则返回-1。 我怎样才能找到内部矢量集合;如果某些饰品存在并在向量内返回索引? 注意:

  • vector collection是类Bag的私有属性。
  • class Trinket,具有名称,重量和值私有属性。
  • 我尝试这样做,但不起作用:

        int Bag::searchTrinket(string name){
            vector<Trinket>::iterator it =find(colleccion.begin(),colleccion.end(), name);
            int pos = 0;
            if(it != colleccion.end()){
    
               cout << "Trinket found in position : ";
               pos = distance(coleccion.begin(), it); 
               cout << pos << endl;
            } else{
             return -1; 
             }
         }
    

    事先,非常感谢!

1 个答案:

答案 0 :(得分:0)

您有Trinket个对象的向量,而不是std::string值的向量,因此您无法使用std::find()。请改用std::find_if(),以便指定如何在每个Trinket内找到所需的字符串。

此外,searchTrinket()如果找到字符串则不返回任何内容,因此返回值未定义。

尝试这样的事情:

/* assuming:
class Trinket
{
private:
    std::string name;
    ...
public:
    std::string getName() const { return name; }
    ...
};
*/

struct hasName
{
    std::string &m_name;
    hasName(std::string &name) : m_name(name) {}
    bool operator()(const Trinket &t) const { return (t.getName() == m_name); }
};

int Bag::searchTrinket(std::string name)
{
    std::vector<Trinket>::iterator it = std::find_if(colleccion.begin(), colleccion.end(), hasName(name));
    if (it != colleccion.end())
    {
        int pos = std::distance(coleccion.begin(), it); 
        std::cout << "Trinket found at position : " << pos << std::endl;
        return pos; 
    }
    else
    {
        std::cout << "Trinket not found" << std::endl;
        return -1; 
    }
}

如果您使用的是C ++ 11或更高版本,并且允许使用lambda,请尝试使用:

auto it = std::find_if(colleccion.begin(), colleccion.end(),
                       [&name](auto &t) { return (t.getName() == name); });