C ++在Vector中查找对象成员值

时间:2016-06-02 01:59:00

标签: c++ vector struct find

我有一个包含两个值的人物结构 - 第一个名字和第一个名字。

这些人物结构有一个矢量。

我需要搜索Vector以找到匹配第一个首字母的第一个人,并从该Struct中检索第一个名字。

我的研究强调需要为Person Struct使用重载运算符,但我需要一些指导。

注意:只能使用Vector和find()算法。无法使用Boost。

  #include <stdio.h>
  #include <iostream>
  #include <stdexcept>
  #include <vector>
  #include <algorithm>
  #include <string>

  using namespace std;

  struct person
  {
     char firstInitial;
     string firstName;

     person(const char fi, const string fn)
     {
        firstInitial = fi;
        firstName = fn;
     };

     char getInitial()
     {
        return firstInitial;
     };

     string getName()
     {
        return firstName;
     };

     bool operator==(const person& l, const person& r) const
     {
        return l.firstInitial == r.firstInitial;
     }

  };


  int main (int argc, char *argv[])
  {
     vector<person> myvector;
     vector<person>::iterator itr;

     myvector.push_back(person('j', "john"));
     myvector.push_back(person('s', "steve"));
     myvector.push_back(person('c', "candice"));

     itr = find (myvector.begin(), myvector.end(), itr->getInitial() == 's');

     if (itr != myvector.end())
        cout << "First Name: " << itr->getName() << '\n';
     else
        cout << "NOT Found" << '\n';
  }

2 个答案:

答案 0 :(得分:0)

operator==成员函数只接受一个参数,而不是两个参数。它的工作是将this与该类的另一个实例进行比较,该实例作为单个参数传递。

此外,std::find的第三个参数不是布尔值,而是要在要搜索的序列中查找的对象的实例。或者,可以将lambda作为第三个参数提供给std::find_if

答案 1 :(得分:0)

1. operator==()应该是二元函数。如果您希望它是成员函数,则应该使用一个参数,例如:

bool operator==(const person& r) const
{
    return firstInitial == r.firstInitial;
}

或使其成为非成员函数(将其移出类声明):

bool operator==(const person& l, const person& r)
{
    return l.firstInitial == r.firstInitial;
}

2. std::find期望其第三个参数是要比较的值,您可以将其更改为:

itr = find (myvector.begin(), myvector.end(), person('s', ""));

LIVE