使用STL的经验总结_指定关联容器的比较类型_12

来源:互联网 发布:游戏解说软件 编辑:程序博客网 时间:2024/05/21 20:28

资料出处:http://hi.baidu.com/szsupernan/item/486b3edc742d8ef593a97418

使用STL的经验总结_指定关联容器的比较类型_12

我们知道标准的关联容器是有序的如set,map,这个顺序是由关联容器声明时的比较类型决定的,比如一个包含int的set的默认类型是set<int,less<int>>,less<int>就是默认的比较类型,如果我们要改变set默认的排序方式,那么我们要自定义该比较类型。
比如我们有个set<string*> setNames,存放了很多的人名,我们采用这样的方式插入setName.insert(new string("张三");这是setNames是以指针从小到大排序的,而我们希望通过人名的字符串的值排序,那么我们就要自己定义比较类型了。
自定义比较类型的方法:
请定义,此处我说的自定义比较类型,而不是比较函数,如果自定义一个比较函数,则是编译通不过的,也就是说我们要通过函数对象来定义比较类型。有关函数对象,可以参考以前的文章,就单纯针对setNames,我们可以如下定义比较类型,来满足我们的需求.
struct StringPtrLess:public binary_function<const string*,const string*,bool>
{
bool operator()(const string* ps1,conststring* ps2) const
{
return *ps1 < *ps2;
}
}
如果经常用到该比较函数,我们可以对其模板化
struct DefenceLess
{
template<typename T>
bool operator()(T ps1,T ps2) const
{
return *ps1<*ps2;
}
}
原创粉丝点击