effective stl: 第20条,为包含指针的关联容器指定比较类型

来源:互联网 发布:编程语言的种类 编辑:程序博客网 时间:2024/05/14 18:37
#include<iostream>#include<string>#include<algorithm>#include<map>#include<set>using namespace std;struct stringPtrLess :    public binary_function<const string*, const string*,bool>{    bool operator()(const string* lptr, const string* rptr) const    {        return *lptr < *rptr;    }};struct Dereference{    template<typename T>    const T& operator()(const T *ptr)const    {        return *ptr;    }};void print(const string* ps){    cout << *ps << endl;}bool Cmp(const string* ptr, const string* ptr2){    return *ptr < *ptr2;}int main(){    set<string*> ssp;    ssp.insert(new string("Anteater"));    ssp.insert(new string("Wombat"));    ssp.insert(new string("Lemur"));    ssp.insert(new string("Panguin"));    //以下方式不会是按照字母排序顺序出现的动物名称,而是4个16进制数--它们是指针的值    for (set<string*>::const_iterator i = ssp.begin(); i != ssp.end(); i++)    {        cout << *i << endl;    }    //避免编写自己的循环,如果换一种方式,但是这种方式不能通过编译,因为传给    //ostream_iterator的参数是string和string*不符合    //copy(ssp.begin(), ssp.end(), ostream_iterator<string>(cout, "\n"));    //方式1:    set<string*, stringPtrLess> sssp;    sssp.insert(new string("Anteater"));    sssp.insert(new string("Wombat"));    sssp.insert(new string("Lemur"));    sssp.insert(new string("Panguin"));    for (set<string*, stringPtrLess>::const_iterator i = sssp.begin(); i != sssp.end(); i++)    {        cout << **i << endl;    }    //方式2:    cout << "方式2:" << endl;    for_each(sssp.begin(), sssp.end(), print);    //方式3    cout << "方式3:" << endl;    //通过解除指针引用,“转换”sssp中的每个元素并把结果写入cout    transform(sssp.begin(), sssp.end(), ostream_iterator<string>(cout, "\n"), Dereference());    //注意,因为set的3个参数需要的是类型,而不是函数,因此下边的做法不可取    //set<string, Cmp> errorSet;    return 0;}

每当创建包含指针的关联容器时,也要记住为该容器指定比较类型,大多数情况下,这个比较类型只是解除指针的引用,并对指针指向的对象进行比较,下边是一个为这样比较函数准备的一个模板。

struct Dereference{    template<typename PtrType>    bool operator()(PtrType pt1, PtyType pt2)    {        return *ptr1 < *ptr2;    }};set<string*, Dereference> ssssp;
0 0
原创粉丝点击