STL - 容器 - 运行期指定排序准则
2015-10-26 11:08
351 查看
RuntimeCmp.hpp
运行结果:
---------------- 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 ----------------
#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 ----------------
相关文章推荐
- 九度OJ 1184:二叉树遍历 (二叉树)
- overflow清除浮动
- php数据分页显示技术
- 下载文件时保存中文名称有乱码
- <iOS>利用dispatch_once创建单例
- Java中的Interface
- Jsoup一个简短的引论——采用Java抓取网页数据
- swift:自动引用计数ARC
- EL表达式的作用
- POJ 1456——Supermarket——————【贪心+并查集优化】
- 《从零开始学Swift》学习笔记(Day 27)——可选类型
- Java关键字的大致含义
- Storm——可靠性(ACK原理)
- 习题三
- 【总结】软件工程(视频结束)
- sonar分析工程并统计单元测试
- 3种LVS/Nginx/HAProxy负载均衡器的对比分析
- 用jena来玩本体
- Change All By Myself
- !important使用