码迷,mamicode.com
首页 > 其他好文 > 详细

关联容器执行器指定排序规则

时间:2014-09-09 10:54:38      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   ar   数据   2014   

//
//  main.cpp
//  setcmp
//
//  Created by IDM-PKU on 14-9-6.
//  Copyright (c) 2014年 PKU. All rights reserved.
//

#include <iostream>
#include <set>
#include "print.hpp"

using namespace std;

template <class T>
class RuntimeCmp{
    public:
    enum cmp_mode{normal,reverse};
    private:
    cmp_mode mode;
    public:
    RuntimeCmp(cmp_mode m=normal):mode(m)
    {}
    bool operator()(const T& t1, const T& t2) const
    {
        return (mode==normal) ? (t1<t2) : (t2<t1);
    }
    
    bool operator==(const RuntimeCmp& rc)
    {
        return mode==rc.mode;
    }
    
};

typedef set<int,RuntimeCmp<int>> IntSet;

void fill(IntSet & set);

int main(int argc, const char * argv[])
{
    IntSet coll1;
    fill(coll1);
    PRINT_ELEMENTS(coll1,"coll1: ");
    RuntimeCmp<int> reverse_order(RuntimeCmp<int>::reverse);
    
    IntSet coll2(reverse_order);
    fill(coll2);
    PRINT_ELEMENTS(coll2,"coll2: ");
    
    coll1=coll2;
    coll1.insert(3);
    PRINT_ELEMENTS(coll1,"coll1: ");
    if(coll1.value_comp()==coll2.value_comp())
    {
        cout << "coll1 and coll2 have same sorting criterion" << endl;
    }
    else
    {
        cout << "coll1 and coll2 have different sorting criterion" << endl;
    }
    return 0;
}

void fill(IntSet & set)
{
    set.insert(4);
    set.insert(7);
    set.insert(5);
    set.insert(1);
    set.insert(6);
    set.insert(2);
    set.insert(5);
}

注意容器赋值时不仅赋值了元素,也赋值了排序规则。

这种技术使得程序执行期才获得排序准则,而且set容器用到不同的排序准则,但其数据型别是相同的。

程序在Mac OS下的运行结果如下:

bubuko.com,布布扣

关联容器执行器指定排序规则

标签:style   blog   http   color   os   io   ar   数据   2014   

原文地址:http://www.cnblogs.com/lakeone/p/3961441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!