zoukankan      html  css  js  c++  java
  • pair/sort/find/qsort

    1. pair

    template <class T1, class T2>
    struct pair
    {
        typedef T1 first_type;
        typedef T2 second_type;
        T1 first;
        T2 second;
        pair() : first(T1()), second(T2()) {}
        pair(const T1 & a, const T2 & b) : first(a), second(b) {}
        template <class U1, class U2>
        pair(const pair<u1, u2=""> & p) : first(p.first), second(p.second) {}
    };
     

    pair()
    默认构造函数,要求T1和T2有默认的构造函数,并同时使用二者默认构造函数来构造容器。

     

    pair(const T1 & a, const T2 & b)
    构造pair。容器的first和second元素,分别使用a和b进行构造。

     

    我们要访问pair容器的值。只需要直接引用p.first,指代第一个元素;直接引用p.second,指代第二个元素。

    最简单的赋值方法就是声明变量后,分别引用first和second对其赋值。

     

    2. sort

    sort函数的分类:

     

    sort
    对给定区间所有元素进行排序

    stable_sort
    对给定区间所有元素进行稳定排序

    stable的函数可保证相等元素的原本相对次序在排序后保持不变。这里的相等,是指你提供的函数表示两个元素相等,并不一定是一摸一样的元素。

    例如,如果你写一个比较函数:

    bool less_len(const string &str1, const string &str2)

    {

    return str1.length() < str2.length();

    }

    
    

    此时,"apple" 和 "winter" 就是相等的,如果在"apple" 出现在"winter"前面,用带stable的函数排序后,他们的次序一定不变,如果你使用的是不带

    "stable"的函数排序,那么排序完后,"Winter"有可能在"apple"的前面。

     

    partial_sort
    对给定区间所有元素部分排序

    partial_sort_copy
    对给定区间复制并排序

    nth_element
    找出给定区间的某个位置对应的元素

    is_sorted
    判断一个区间是否已经排好序

    partition
    使得符合某个条件的元素放在前面

    qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))
    参数表
    *base: 待排序的元素(数组,下标0起)。
    num: 元素的数量。
     每个元素的内存空间大小(以字节为单位)。可用sizeof()测得。
    int(*)compare: 指向一个比较函数。*elem1 *elem2: 指向待比较的数据。
    比较函数的返回值
    返回值是int类型,确定elem1与elem2的相对位置。
    elem1在elem2右侧返回正数,elem1在elem2左侧返回负数。
    控制返回值可以确定升序/降序。
    一个升序排序的例程:
    int Compare(const void *elem1, const void *elem2)
    {
        return *((int *)(elem1)) - *((int *)(elem2));
    }
    int a[10];
    //赋值 qsort(a, 10, sizeof(int), Compare);

     

    所有的sort算法的参数都需要输入一个范围,[begin, end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAccessIterator),

    也就是说可以随机访问的迭代器,如:it+n什么的。(partition 和stable_partition 除外),如果你需要自己定义比较函数,你可以

    把你定义好的仿函数(functor)作为参数传入。每种算法都支持传入比较函数。

     

    系统自己为sort提供了less仿函数。在STL中还提供了其他仿函数,以下是仿函数列表:

    equal_to
    相等

    not_equal_to
    不相等

    less
    小于

    greater
    大于

    less_equal
    小于等于

    greater_equal
    大于等于

    需要注意的是,这些函数不是都能适用于你的sort算法,如何选择,决定于你的应用。另外,不能直接写入仿函数的名字,而是要写其重载的()函数,

    greater<int>()

    当你的容器中元素时一些标准类型(int float char)或者string时,你可以直接使用这些函数模板。但如果你时自己定义的类型或者你需要按照其他方式

    排序,你可以有两种方法来达到效果:一种是自己写比较函数。另一种是重载类型的'<'操作赋。

     

    3. find

    find分类

    find

    find_first_of

    find_if

    adjacent_find

  • 相关阅读:
    jms学习笔记
    UML类图与类的关系详解
    javolution学习--介绍
    Eclipse中10个最有用的快捷键组合
    [疯狂Java]JDBC:PreparedStatement预编译执行SQL语句
    Oracle OLAP 与 OLTP 介绍
    DRDS SQL兼容性
    DRDS 概述
    跨时代的分布式数据库 – 阿里云DRDS详解(转)
    java.net.UnknownHostException: www.terracotta.org
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4445973.html
Copyright © 2011-2022 走看看