正在重载集合的运算符()
overloading operator() for set
在下面的代码中,我不明白为什么要创建自定义结构以及重载运算符((是如何工作的。如果有人帮我,那对我将是一个很大的帮助。在代码中,我试图在集合中插入自定义数据类型。
#include<iostream>
#include<set>
#include<string>
using namespace std;
class Person
{
public:
string name;
int id;
Person()
{
}
Person(int id, string name)
{
this->id = id;
this->name = name;
}
void print() const
{
cout<<"ID : "<<id <<" Name: "<<name<<endl;
}
bool operator < (const Person& P) const
{ ///cout<<this->id<<" "<<P.id<<endl;
if (this->id > P.id)
return true;
return false;
}
bool operator == (const Person& P) const
{
if (this->id == P.id)
return true;
return false;
}
};
struct custom
{
bool operator () (const Person& left,const Person& right) const
{
if(right < left)
{
if (right == left)
return true;
return true;
}
return false;
}
};
int main()
{
set<Person,custom> s;
s.insert(Person(5,string("G")));
s.insert(Person(1,string("A")));
s.insert(Person(1,string("A")));
s.insert(Person(2,string("B")));
s.insert(Person(2,string("B")));
s.insert(Person(3,string("C")));
s.insert(Person(4,string("D")));
s.insert(Person(4,string("D")));
set<Person> :: iterator it = s.begin();
while(it != s.end())
{
it->print();
it++;
}
}
}
set<Person>
在添加到集合或搜索元素时会使用Person::operator<
来比较对象。set<Person, custom>
使用custom::operator()
来比较对象。在该代码中,custom::operator()
有效地返回right < left
(如果您通读了所有冗余和误导性代码(,因此set<Person, custom>
创建了一个集合,其顺序与set<Person>
创建的集合相反。
请注意,Person::operator<(const Person& P)
的主体可以更简单地写成return id > P.id;
,而custom::operator()
的主体,正如我上面提到的,简单地写成了right < left
。
相关文章:
- 处理多个异常集合的C++方法
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 如何将ampl中的集合表示为c++中的向量
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 使用模板化运算符输出集合集合<<
- 集合迭代器的加号运算符不起作用
- 将相等运算符重载配对以插入到集合中
- [唯一相等运算符]在集合中查找重复元素并将其分组的快速算法是什么
- 合并C++中的集合,也会重载运算符
- 如何正确重载运算符<<对于具有嵌套私有类集合的类?
- 正在重载集合的运算符()
- 集合和compering/sorting函子或less运算符