c ++使用std :: find搜索向量

时间:2014-01-10 16:16:52

标签: c++

我正在尝试将std::find用于自定义矢量对象。

3 个答案:

答案 0 :(得分:1)

我不理解find

之后的if语句
 it = std::find(vector.begin(),vector.end(),person(name,name));
 if (it !=userDetails.end()) {
       //found
 }
 else {
       //not found
 }

这是什么意思?

it !=userDetails.end()

我相信这些绅士不属于同一范围。

也许你想写

 if (it !=vector.end()) {
编辑:我看到你已经通过了你的代码。但是在主要的

int main() {
   person personDetails;
   personDetails.findName();
}

您创建了一个默认的初始化对象数据成员(即std :: string对象)为空。矢量本身也是空的。所以我不明白你会找到什么?

此外,我没有看到用于填充矢量的函数或方法。

似乎你所使用的tahit人是一个有姓名和个人资料的人

it = std :: find(vector.begin(),vector.end(),person(name,name));

然后,如果向量中的记录包含不同名称和配置文件的对,则无法找到。

查看自己的评论

/*e.g now my vector contains
         john male
         mary female
         susan female

因此您无法找到定义为人(姓名,姓名)的记录。参数应该有不同的值。

将运算符定义为

bool operator==(const person &lhs,const person &rhs) {
    return lhs.name == rhs.name && lhs.profile == rhs.profile;
}

答案 1 :(得分:0)

据我所知,您的代码是正确的。

答案 2 :(得分:0)

以下可能会有所帮助:

class Person
{
public:
    Person(const std::string& name, const std::string& profile) :
        name(name),
        profile(profile)
    {}

    const std::string& getName() const { return name; }

private:
    std::string name;
    std::string profile;
};


class FindByName
{
public:
    explicit FindByName(const std::string& name) : name(name) {}

    bool operator () (const Person& person) const
    {
        return person.getName() == name;
    }
private:
    std::string name;
};


int main(int argc, char *argv[])
{
    std::vector<Person> persons = {
        {"john", "male"},
        {"mary", "female"},
        {"susan", "female"}
    };

    auto it = std::find_if(persons.begin(), persons.end(), FindByName("mary"));

    // ...

    return 0;
}