将类向量的两个函数返回与其他类向量元素函数进行比较

时间:2013-05-31 12:42:53

标签: c++ class vector

我上课了:

class MyClass {
public:
  void SetName(std::string name) { Name = name; }
  void SetAge(int age) { Age = age; }
  void SetId(int id) { Id = id; }
  void SetNationality(std::string nationality) { Nationality = nationality; }
  //.. other set functions
  std::string GetName() { return Name; }
  int GetAge() { return Age; }
  int GetId { return Id; }
  //.... other Get functions 
Private:
  std::string Name;
  int Age;
  int Id;
  std::string Nationality;
  //... (many other variables)
};

然后我有一个函数,我在其中制作并填充向量(std::vector<MyClass> MyVector) 这个功能不是很重要,所以我没有在这里写。

然后我有使用我的矢量的功能:

void MyFun(std::vector<MyClass> vec)
{
  // Now I need to print vector elements Age and Name
  for (std::vector<MyClass>::iterator it = vec.begin(); it != vec.end(); it++) {
    // but if vector has two or more elements which have same Name and Age,
    // I print only the element which has the biggest Id and other elements I 
    // erase from vector
    // if (...) {}          
    std::cout << it->GetName << " :Name; Age: " << it->GetAge << std::endl;
  }
}

有人可以帮我吗? 重要的是,如果元素的参数之一(年龄或名称)不同,那么我打印矢量元素名称和年龄。其他变量值无关紧要。它们可以不同或相同。

1 个答案:

答案 0 :(得分:1)

要删除重复项,您可以先使用std::sort对矢量进行排序,然后使用std::unique删除重复项。如果重复项已经在连续元素中,您可以跳过std::sort并使用std::unique

要使这些工作,您需要告诉他们如何比较元素。

bool less_name_age( MyClass const &lhs, MyClass const &rhs ) {
    return lhs.name < rhs.name? true // ascending alphabetical names
         : rhs.name < lhs.name? false
         : lhs.age < rhs.age? true // ascending ages
         : rhs.age < lhs.age? false
         : rhs.id < lhs.id; // descending order of ID
}

bool equal_name_age( MyClass const &lhs, MyClass const &rhs ) {
    return lhs.name == rhs.name && lhs.age == rhs.age;
}

std::sort( vec.begin(), vec.end(), less_name_age );
std::vector< MyClass >::iterator new_end
    = std::unique( vec.begin(), vec.end(), equal_name_age );

我省略了getter / setter习语,因为生命太短了。