【1】
bool operator > (const Book &p) const { return p.isbn < isbn; } 是对运算符 > 的重载 ,const Book &p 是 对类Book 的引用 &p,p.isbn < isbn 是对类中成员 isbn比较大小,并返回bool 型的值。
【2】
在STL中,如果要将自定义的类型放入到set中的话,就需要重载“<”符号。原因是set是一个有序的集合,集合会按照“<”比较的大小,默认按照从小到大的顺序排列。
假设现在设计如下类型:
这时,为了让MyType类型可以顺利地放进set中,我们必须重载“<”,那么问题来了,要如何重载呢?
class MyType { public: int a, b, c; }这个类型有三个数据成员,不妨要求先按a值从小到大排列,如果a值相等,就按照b和c的大小排列。
bool operator<(const MyType& myType) const { return a<myType.a?true:(b<myType.b?true:c<myType.c); }
这样一来,set就可以正常工作了。当有MyType(1,2,3)、MyType(1,2,4)两个元素时,运行结果如下:
<1,2,3> <1,2,4>
【3】
C++语法解释:
map<int, string>::iterator iter 是声明一个 迭代器。iterator类是在map<int, string>类中定义的,所以如果要使用它,需要使用作用域解析操作符::。“迭代器相当于指针!” 不过更安全些。每种容器都定义了迭代器,迭代器在STL中相当重要,它将容器和算法链接起来 ,用容器的时候迭代器是十分必须的。
map<int, string> iter 是 声明一个map容器。
【4】
运算符重载格式:<返回类型说明符> operator <运算符符号>(<参数表>) { <函数体> }【5】表有两列,要求:1.第二列从大到小排列
2.若第二列相等,第一列从小到大排序
C++运算符重载 实现:
struct Job{ 8 int x,y; 9 bool operator < (const Job &j) const { //operator 10 if(y==j.y){ 11 return x < j.x; 12 } 13 return y > j.y; 14 } 15 };vector<Job> v; 24 for(int i=0;i<n;i++){ 25 scanf("%d%d",&x,&y); 26 v.push_back(Job{x,y}); //在vector的末尾插入一个元素 27 }
解C++语法map<int, string>::iterator iter
解释C++语法map<int, string>::iterator iter
解释C++语法map<int, string>::iterator iter