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

//
//  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下的运行结果如下:

时间: 2024-11-06 15:46:03

关联容器执行器指定排序规则的相关文章

顺序容器和关联容器的特点&amp;STL各容器粗略对比

顺序容器和关联容器的特点1.所有的关联容器都会自动排序,但map和set不允许重复元素,而multimap和multiset允许重复元素 2.关联容器中,map和multimap的key和val是分开的,而set和multiset的key和val是相同的 3.除了vector和deque的迭代器为随机迭代器之外,其余容器的迭代器都是双向迭代器,不能进行++操作 4.顺序容器的insert函数的三种形式为: iterator insert(iterator position, value_type

C++学习笔记之STL标准库(六)set/multiset 关联容器

包含头文件 #include <set>  声明命名空间using namespace std; set/multiset是关联容器的一种,它们会对存储的元素进行自动排序,存储元素的值不能直接的被改变,只能通过删除旧值,再插入新值的方式达到更改元素值的目的.set不允许元素的值有重复,而multiset允许有重复的元素,这是他们的唯一区别.关联容器set, multiset以及后面的map, multimap内部采用的是一种非常高效的平衡检索二叉树:红黑树. 1)构造函数 set(); //创

翻译:MariaDB字符集和排序规则

html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co

无序关联容器(C++11)

2012-11-27 15:22 张海龙/袁国忠 译 人民邮电出版社 字号:T|T <C++Primer Plus(第6版)(中文版)>附录G标准模板库方法和函数:本附录总结了STL容器方法和通用的STL算法函数.本节为大家介绍无序关联容器(C++11). AD: G.4  无序关联容器(C++11) 前面说过,无序关联容器(unordered_set.unordered_multiset.unordered_map和 unordered_multimap)使用键和哈希表,以便能够快速存取数据

数据库字符集与排序规则(Character Set And Collation)

数据库需要适应各种语言和字符就需要支持不同的字符集(Character Set),每种字符集也有各自的排序规则(Collation). (注意:Collation原意为校对,校勘,但是根据实际使用场景,觉得还是翻译为排序规则比较合适) 在绝大部分情形中,使用何种字符集和排序规则决定于服务器,数据库和表的级别,一般SQL操作不必关心这些. 以下操作均以MySQL为例. 查看数据库支持的字符集与排序规则 查看字符集: SHOW CHARACTER SET; 部分结果: 查看排序规则:(后缀"_cs&

SQL Server 问题之 排序规则(collation)冲突

一.写在前面 最近公司进行开发环境升级,数据库也准备了一个新的服务器,一切准备好后开始数据迁移,采取的方式为对现有Database(现有服务器Windows Server 2003 + SQL Server 2005)进行Back up,然后在新服务器(Windows Server 2008 R2 + SQL Server 2008 R2)上再Restore Databse,一切似乎挺顺利的.但是当从Web Server开始访问的时候出现错误Cannot resolve the collatio

Ruby操作MongoDB(进阶七)-排序规则Collations

本篇博文从三个方面进行排序规则Collations的讲解.其中包括概览,使用方式和支持排序的操作.首先我们对排序规则进行一个概览性的介绍 排序规则概览 排序规则为特定语言习惯中的字符串比较提供一套规则,例如,在加拿大法语中,给定词汇的最后一个重音节决定了其排序顺序. 考虑下述法语词汇: cote < coté < cte < cté 使用加拿大法语排序规则,得到如下排序结果 cote < cte < coté < cté 如果没有指定排序规则,MongoDB使用简单的二

SQL 排序规则问题

http://blog.csdn.net/delphigbg/article/details/12744807 MSSQL排序规则总结 什么是排序规则呢? 排序规则根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则.SQL Server 支持在单个数据库中存储具有不同排序规则的对象.MSDN解释:在 Microsoft SQL Server  中,字符串的物理存储由排序规则控制.排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则 当 Transact-SQL 语句在具有不

注意Vietnamese_CI_AS排序规则下的特殊字符大小敏感问题

注意Vietnamese_CI_AS排序规则下的特殊字符大小敏感问题   最近,在SQL Server中遇到了Vietnamese_CI_AS排序规则的特殊字符的大小写敏感问题,是的,你没有看错,这句话并没有语病(DBA老司机懂的).遇到这个特殊情况的时候,我也大跌眼镜,颠覆我的一些常识,OK,闲话少说,我们来演示一下这个特殊场景下出现的特殊情况. 准备测试环境: 服务器排序规则(Server Collation)         :  Latin1_General_CI_AS 数据库排序规则(