首先请原谅我的英语,不是我的母语。 好吧,所以在大学里,他们只是用c ++教我矢量。我正在做一个项目,我有一个包类和一个饰品类。 我正在尝试在一个函数中搜索包含是否存在某些饰品,如果是,则返回饰品的索引,如果不是,则返回-1。 我怎样才能找到内部矢量集合;如果某些饰品存在并在向量内返回索引? 注意:
我尝试这样做,但不起作用:
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;
}
}
事先,非常感谢!
答案 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); });