C++ 如何使操作员过载<;用于将对象放入集合

C++ 如何使操作员过载<;用于将对象放入集合,c++,set,operators,operator-overloading,C++,Set,Operators,Operator Overloading,我想把对象放到集合中,我知道,我需要重载操作符

我想把对象放到集合中,我知道,我需要重载操作符<。所以我想出了这样的办法:

   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);
   }
bool客户端::操作员<(类别和cC1、类别和cC2){
返回cC1.getName()categoriesMap.insert(i->categoriesMapPos++,cat);
}
i是指向内部类的指针,其中定义了set categoriesMap及其迭代器

因此,我重载运算符使该运算符成为自由(非成员)函数:

bool operator< (Category const& cC1, Category const& cC2){
   return cC1.getName() < cC2.getName();
}
bool运算符<(类别常量和cC1、类别常量和cC2){
返回cC1.getName()
如果
getName
不是公共函数,您可能需要为该函数提供友谊


operator@remyabel:如果它正在比较它所属类型的对象。这是比较不同的类型,所以根本不应该是成员。是的,我需要比较类别对象,而不是客户端对象。所以,我需要做的是使它成为一个非成员函数。但如果我这样做,如何比较两个类别对象。我有点迷路了…@Fractal在将比较运算符作为自由函数实现时遇到了什么问题?我看到您对此感到有点困惑,但我很难说出原因。然后我得到另一个错误
“错误1错误C2678:二进制'@Fractal抱歉,我没有注意到您在参数上缺少了
const
s。相应地编辑了答案。请注意,现在
getName
还需要是一个
const
成员函数才能编译代码。