如何重载运算符<用于将对象放入集合中

时间:2013-11-27 13:29:19

标签: c++ set operators operator-overloading

我想把对象放到set中,据我所知,我需要重载operator<为了那个原因。所以我想出了类似的东西:

   bool Client::operator< (Category &cC1, Category &cC2){
      return cC1.getName() < cC2.getName();
   }

   // Setters----------------------------------------------------------------
   void Client::addNewCategory(const string &categName){
      Category cat(categName);
      i->categoriesMap.insert(i->categoriesMapPos++, cat);
   }

我是指向内部类的指针,其中定义了categories categories及其迭代器。

所以我重载了运算符&lt;,但它仍然不起作用,我得到一个错误,操作符有太多的参数(但我怎么能比较没有两个对象的对象)?此外,我收到错误5 IntelliSense: class "ExpenseManagerNamespace::Client" has no member "operator<"我使用visual studio 2013。

1 个答案:

答案 0 :(得分:2)

使操作员成为免费(非成员)功能:

bool operator< (Category const& cC1, Category const& cC2){
   return cC1.getName() < cC2.getName();
}

如果getName不公开,您可能必须为该功能提供友谊。

operator<的成员函数版本用于将某些其他对象与this进行比较。这可能不是您想要的,因为在您的情况下this类型为Client,您似乎想要比较两个Category