zoukankan      html  css  js  c++  java
  • C++ stable_sort()用法详解

    转载 http://c.biancheng.net/view/7460.htm

    通过阅读《C++ sort()排序函数》一节,读者已经了解了 sort() 函数的功能和用法。值得一提的是,当指定范围内包含多个相等的元素时,sort() 排序函数无法保证不改变它们的相对位置。那么,如果既要完成排序又要保证相等元素的相对位置,该怎么办呢?可以使用 stable_sort() 函数。

    table_sort() 函数的用法也有 2 种,其语法格式和 sort() 函数完全相同(仅函数名不同):
    //对 [first, last) 区域内的元素做默认的升序排序
    void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );
    //按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
    void stable_sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
    其中,first 和 last 都为随机访问迭代器,它们的组合 [first, last) 用来指定要排序的目标区域;另外在第 2 种格式中,comp 可以是 C++ STL 标准库提供的排序规则(比如 std::greater<T>),也可以是自定义的排序规则。

    举个例子:
    #include <iostream> // std::cout
    #include <algorithm> // std::stable_sort
    #include <vector> // std::vector
    //以普通函数的方式实现自定义排序规则
    bool mycomp(int i, int j) {
    return (i < j);
    }
    //以函数对象的方式实现自定义排序规则
    class mycomp2 {
    public:
    bool operator() (int i, int j) {
    return (i < j);
    }
    };
    int main() {
    std::vector<int> myvector{ 32, 71, 12, 45, 26, 80, 53, 33 };
    //调用第一种语法格式,对 32、71、12、45 进行排序
    std::stable_sort(myvector.begin(), myvector.begin() + 4); //(12 32 45 71) 26 80 53 33
    //调用第二种语法格式,利用STL标准库提供的其它比较规则(比如 greater<T>)进行排序
    std::stable_sort(myvector.begin(), myvector.begin() + 4, std::greater<int>()); //(71 45 32 12) 26 80 53 33
    //调用第二种语法格式,通过自定义比较规则进行排序,这里也可以换成 mycomp2()
    std::stable_sort(myvector.begin(), myvector.end(), mycomp);//12 26 32 33 45 53 71 80
    //输出 myvector 容器中的元素
    for (std::vector<int>::iterator it = myvector.begin(); it != myvector.end(); ++it) {
    std::cout << *it << ' ';
    }
    return 0;
    }
    

      

  • 相关阅读:
    Unity WebGL MoonSharp崩溃问题
    UISprite(NGUI)扩展 图片镂空
    自动化交易机器人Beta猪
    如何成为一个真正在路上的Linuxer
    课堂里学不到的C与C++那些事(一)
    Android ART运行时与Dalvik虚拟机
    用Dockerfile构建docker image
    论docker中 CMD 与 ENTRYPOINT 的区别
    sshfs远程文件系统挂载
    docker镜像与容器存储结构分析
  • 原文地址:https://www.cnblogs.com/codeAndlearn/p/14230381.html
Copyright © 2011-2022 走看看