标签:
C++模板库的使用庞大而复杂,故记录一下学习过程,和各种不明白
set集合自定义比较函数:两种方式------比较函数作为模板参数、比较函数作为set集合构造函数的参数。
先记录比较函数作为模板参数:
//模板原型:
template < class T, // set::key_type/value_type class Compare = less<T>, //set::key_compare/value_compare class Alloc = allocator<T> // set::allocator_type > class set;
class T:集合存储的元素类型,class Compare:比较函数,class Alloc:目前不知道,分配内存吧。
默认的比较函数的模板参数是:less<T>,还有greater<T>;用于C++内置类型或者重载了“<"操作符的类
不知道为啥我写的代码,不能用greater<T>。代码如下:
#include <set> #include <iostream> #include <string> using namespace std; class Info { public: bool operator < (const Info &a) const { return a.score < score; } string name; float score; }; int main() { set< Info,greater<Info> > s; Info info; info.name = "jack"; info.score = 80.5; s.insert(info); info.name = "tomi"; info.score = 20.5; s.insert(info); info.name = "Nacy"; info.score = 60.5; s.insert(info); //set<int>::iterator it; set< Info, greater<Info> >::iterator it; for(it = s.begin(); it != s.end(); it++) { cout << (*it).name <<" : " << (*it).score << endl; } cout << endl; return 0; }
可以自定义比较函数:非结构或类类型:重载“()”运算符;结构或类类型:重载“<”操作符。
记录比较函数作为构造函数的参数:
待补充。。。
标签:
原文地址:http://www.cnblogs.com/OrdinaryMiracle/p/4397801.html