zoukankan      html  css  js  c++  java
  • STL

    RuntimeStringCmp.cpp

    #include <string>
    
    using namespace std;
    
    // function object to compare strings
    // - allows you to set the comparison criterion at runtime
    // - allows you to compare case insensitive
    class RuntimeStringCmp 
    {
    public:
        // constants for the comparison criterion
        enum cmp_mode { normal, nocase };
    private:
        // actual comparison mode
        const cmp_mode mode;
    
        // auxiliary function to compare case insensitive
        static bool nocase_compare(char c1, char c2) 
        {
            return toupper(c1) < toupper(c2);
        }
    public:
        // constructor: initializes the comparison criterion
        RuntimeStringCmp(cmp_mode m = normal) : mode(m) { }
    
        // the comparison
        bool operator() (const string& s1, const string& s2) const 
        {
            if (mode == normal) 
            {
                return s1<s2;
            }
            else 
            {
                return lexicographical_compare(s1.begin(), s1.end(),
                    s2.begin(), s2.end(),
                    nocase_compare);
            }
        }
    };

    MapAdvanceTest.h

    #ifndef        _Stl_Container_Map_Advance_Test_H_
    #define        _Stl_Container_Map_Advance_Test_H_
    
    #include "../../TestBase.h"
    #include <map>
    
    class RuntimeStringCmp;
    typedef map<string, string, RuntimeStringCmp> StringStringMap;
    
    class MapAdvanceTest : public TestBase
    {
    public:
        
        MapAdvanceTest(const string &c, const string &d) : TestBase(c, d) { }
        void run();
    private:
        ...
        void runtimeMapCompare();
        // private inner method 
        void fillAndPrint(StringStringMap& coll);
    };
    
    
    
    #endif

    MapAdvanceTest.cpp

    #include <map>
    #include <string>
    #include <iostream>
    #include <iomanip>
    #include <algorithm>
    #include <cctype>
    #include "../../Core/RuntimeStringCmp.hpp"
    #include "MapAdvanceTest.h"
    #include "../../Core/ContainerUtil.h"
    
    using namespace std;
    
    ...
    
    void MapAdvanceTest::fillAndPrint(StringStringMap& coll)
    {
        // insert elements in random order
        coll["Deutschland"] = "Germany";
        coll["deutsch"] = "German";
        coll["Haken"] = "snag";
        coll["arbeiten"] = "work";
        coll["Hund"] = "dog";
        coll["gehen"] = "go";
        coll["Unternehmen"] = "enterprise";
        coll["unternehmen"] = "undertake";
        coll["gehen"] = "walk";
        coll["Bestatter"] = "undertaker";
    
        // print elements
        cout.setf(ios::left, ios::adjustfield);
        for (const auto& elem : coll) 
        {
            cout << setw(15) << elem.first << " "
                << elem.second << endl;
        }
        cout << endl;

          cout << "#############################################" << endl;

    }
    
    void MapAdvanceTest::runtimeMapCompare()
    {
        // create a container with the default comparison criterion
        StringStringMap coll1;
        fillAndPrint(coll1);
    
        // create an object for case-insensitive comparisons
        RuntimeStringCmp ignorecase(RuntimeStringCmp::nocase);
    
        // create a container with the case-insensitive comparisons criterion
        StringStringMap coll2(ignorecase);
        fillAndPrint(coll2);
    }
    
    void MapAdvanceTest::run()
    {
        printStart("runtimeMapCompare()");
        runtimeMapCompare();
        printEnd("runtimeMapCompare()");
    }

    运行结果:

    ---------------- runtimeMapCompare(): Run Start ----------------
    Bestatter undertaker
    Deutschland Germany
    Haken snag
    Hund dog
    Unternehmen enterprise
    arbeiten work
    deutsch German
    gehen walk
    unternehmen undertake

    #############################################
    arbeiten work
    Bestatter undertaker
    deutsch German
    Deutschland Germany
    gehen walk
    Haken snag
    Hund dog
    Unternehmen undertake

    #############################################
    ---------------- runtimeMapCompare(): Run End ----------------

     

  • 相关阅读:
    hdu-2814-Interesting Fibonacci-斐波那契周期节
    servletContext
    Java中的NIO和IO的对比分析
    sessionID和cookie
    会话跟踪session cookie
    C++中的头文件和源文件
    C++ 头文件
    二叉线索树
    C 二叉树 1
    C 二叉树
  • 原文地址:https://www.cnblogs.com/davidgu/p/4974020.html
Copyright © 2011-2022 走看看