C++中用于删除重复项的通用函数

use*_*321 1 c++ arrays templates

我必须创建一个泛型函数来删除vectorInt中的所有重复项,这是一个vectorI,它是我创建的具有getYear和getName函数的类.我不确定如何制作该函数,因为比较了vectorInt,因为Book与getName和getYear进行了比较.Int在一个级别进行比较,而Book在两个级别进行比较.

template<class T> vector<T> removeDuplicates(vector<T> n){
for(unsigned int i = 0; i < n.size();i++){
   T current = n.at(i);
   for(unsigned int j = i + 1; j < n.size(); j++){
       T compare = n.at(j);
       if(current == compare)
           n.erase(n.begin() + j);  
  }
} 
return n;
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

编辑:

试过用这个

 template <class T> std::vector<T> removeDuplicates(std::vector<T> vec)
 {
 std::sort( vec.begin(), vec.end() );
 vec.erase( std::unique( vec.begin(), vec.end() ), vec.end() );
 return vec;
 }
Run Code Online (Sandbox Code Playgroud)

但对于书籍我一直都会收到错误

class Book { 
public:
Book();
Book(std::string, int);
int getYear() const {
return year;
 }
std::string getName() const {
return name;
}
bool operator==(Book const &);

  private:
  std::string name;
  int year;
};
Run Code Online (Sandbox Code Playgroud)

Wug*_*Wug 5

纯STL版本:

#include <algorithm>

template <class T> std::vector<T> removeDuplicates(std::vector<T> vec)
{
    std::sort( vec.begin(), vec.end() );
    std::vec.erase( std::unique( vec.begin(), vec.end() ), vec.end() );
    return vec;
}
Run Code Online (Sandbox Code Playgroud)

您可以通过获取和返回引用而不是副本来提高效率.

代码从这个问题的答案中无耻地咆哮.