zoukankan      html  css  js  c++  java
  • STL

    RuntimeCmp.hpp

    #include <set>
    
    using namespace std;
    
    // type for runtime sorting criterion
    class RuntimeCmp 
    {
    public:
        enum cmp_mode { normal, reverse };
    private:
        cmp_mode mode;
    public:
        // constructor for sorting criterion
        // - default criterion uses value normal
        RuntimeCmp(cmp_mode m = normal) : mode(m) { }
        // comparison of elements
        // - member function for any element type
        template <typename T>
        bool operator() (const T& t1, const T& t2) const 
        {
            return mode == normal ? t1<t2
                : t2<t1;
        }
        // comparison of sorting criteria
        bool operator== (const RuntimeCmp& rc) const 
        {
            return mode == rc.mode;
        }
    };
    
    // type of a set that uses this sorting criterion
    typedef set<int, RuntimeCmp> IntSet;
    #include <iostream>
    #include <set>
    #include <algorithm>
    #include <iterator>
    #include <functional>
    #include "SetTest.h"
    #include "../../Core/RuntimeCmp.hpp"
    #include "../../Core/print.hpp"
    
    using namespace std;
    
    void SetTest::runtimeCompare()
    {
        // create, fill, and print set with normal element order
        // - uses default sorting criterion
        IntSet coll1 = { 4, 7, 5, 1, 6, 2, 5 };
        PRINT_ELEMENTS(coll1, "coll1: ");
    
        // create sorting criterion with reverse element order
        RuntimeCmp reverse_order(RuntimeCmp::reverse);
    
        // create, fill, and print set with reverse element order
        IntSet coll2(reverse_order);
        coll2 = { 4, 7, 5, 1, 6, 2, 5 };
        PRINT_ELEMENTS(coll2, "coll2: ");
    
        // assign elements AND sorting criterion
        coll1 = coll2;
        coll1.insert(3);
        PRINT_ELEMENTS(coll1, "coll1: ");
    
        // just to make sure...
        if (coll1.value_comp() == coll2.value_comp()) 
        {
            cout << "coll1 and coll2 have the same sorting criterion"
                << endl;
        }
        else 
        {
            cout << "coll1 and coll2 have a different sorting criterion"
                << endl;
        }
    }
    
    void SetTest::run()
    {
        printStart("runtimeCompare()");
        runtimeCompare();
        printEnd("runtimeCompare()");
    }

    运行结果:

    ---------------- runtimeCompare(): Run Start ----------------
    coll1: 1 2 4 5 6 7
    coll2: 7 6 5 4 2 1
    coll1: 7 6 5 4 3 2 1
    coll1 and coll2 have the same sorting criterion
    ---------------- runtimeCompare(): Run End ----------------

  • 相关阅读:
    linux命令大全
    IP协议
    TCP、IP、ARP协议之间的工作关系
    程序出现问题后
    HTTP(超文本传输协议)
    多线程
    syslog.conf文件
    logger命令
    gdb
    二、数据的存储结构
  • 原文地址:https://www.cnblogs.com/davidgu/p/4910614.html
Copyright © 2011-2022 走看看