返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++使用sort对容器排序的实现
  • 218
分享到

C++使用sort对容器排序的实现

2024-04-02 19:04:59 218人浏览 泡泡鱼
摘要

本文主要解决以下问题 STL中sort的使用方法 使用sort对vector的排序 使用sort对map排序 使用sort对list排序

本文主要解决以下问题

  • STL中sort的使用方法
  • 使用sort对vector的排序
  • 使用sort对map排序
  • 使用sort对list排序

STL中sort的使用方法

c++ STL 标准库中的 sort() 函数,本质就是一个模板函数。该函数专门用来对容器或普通数组中指定范围内的元素进行排序,排序规则默认以元素值的大小做升序排序,除此之外我们也可以选择标准库提供的其它排序规则(比如std::greater降序排序规则),甚至还可以自定义排序规则。

值得一提的是,sort() 函数位于头文件中,因此在使用该函数前,程序中应包含如下语句:


#include <alGorithm>

sort() 函数有 2 种用法,其语法格式分别为:


//对 [first, last) 区域内的元素做默认的升序排序
void sort (RandoMaccessIterator first, RandomAccessIterator last);
//按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

其中,first 和 last 都为随机访问迭代器,它们的组合 [first, last) 用来指定要排序的目标区域;另外在第 2 种格式中,comp 可以是 C++ STL 标准库提供的排序规则(比如 std::greater),也可以是自定义的排序规则。

数组排序样例:


#include <algorithm>
#include <algorithm>

using namespace std;

int main(){
    int arr[] = {2,6,3,5,4,8,1,0,9,10};
    sort(arr, arr+10);
    for(int i = 0;i < 10;i++)
        cout << arr[i] << " ";
}
// out


使用 STL 标准库提供的排序规则


int main(){
    int arr[] = {2,6,3,5,4,8,1,0,9,10};
    sort(arr, arr+10, std::greater<int>());
    for(int i = 0;i < 10;i++)
        cout << arr[i] << " ";
    cout << endl;
    sort(arr, arr+10, std::less<int>());
    for(int i = 0;i < 10;i++)
        cout << arr[i] << " ";
}
// out

使用自定义比较器


bool cmp(const int a, const int b){
    return a < b;
}
int main(){
    int arr[] = {2,6,3,5,4,8,1,0,9,10};
    sort(arr, arr+10, cmp);
    for(int i = 0;i < 10;i++)
        cout << arr[i] << " ";
}
// out

使用 lambda 表达式自定义比较器


int main(){
    int arr[] = {2,6,3,5,4,8,1,0,9,10};
    sort(arr, arr+10, [](const int a, const int b){
         return a < b;
         });
    for(int i = 0;i < 10;i++)
        cout << arr[i] << " ";
}
// out

使用sort对vector的排序

在 C++ 中几乎操作vector时,几乎可以视作是在操作数组,可以将vector看作对数组的封装。因此,使用sort对vector进行排序时完全可以遵循上面使用sort对数组的排序方法。

一维vector排序


int main(){
    vector<int> vec = {2,6,3,5,4,8,1,0,9,10};
    sort(vec.begin(), vec.end());
    for(int item: vec)
        cout << item << " ";
    return 0;
}
// out

二维vector排序。数组保存一系列的坐标,先按照第二维进行升序排列,再按照第一维升序排列


int main(){
    vector<vector<int>> vvi = {{9,1}, {2,3}, {8,7}, {6,2}, {5,2}};

    sort(vvi.begin(), vvi.end(), [](const vector<int>& v1, const vector<int>& v2){
         if(v1[1] < v2[1]) return true;
         else if(v1[1] == v2[1]) return v1[0] < v2[0];
         else return false;
         });

    for(vector<int> v: vvi){
        for(int item: v){
            cout << item << " ";
        }
        cout << endl;
    }

    return 0;
}
// out

使用sort对map排序

map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value,map本身的实现方式内含了比较器的设置,只要我们在map初始化的时候传入比较器,即可完成对应的排序。

定义包含水果及其个数的map,按照水果名称字典序进行排序 (按key排序)


#include<map>

using namespace std;

int main(){
    map<string, int, less<string>> msi;
    msi["apple"] = 5;
    msi["watermelon"] = 2;
    msi["pear"] = 3;
    msi["peach"] = 6;
    msi["cherry"] = 10;

    for(auto item: msi)
        cout << item.first << " " << item.second << endl;

    return 0;
}
// out


定义包含水果及其个数的map,按照水果个数进行排序,当水果个数相同时,按照水果名称字典序排序 (将map转为vector进行排序)


bool cmp(const pair<string, int>& a, const pair<string, int>& b){
    if(a.second < b.second) return true;
    else if(a.second == b.second) return a.first < b.first;
    else return false;
}
int main(){
    map<string, int> msi;
    msi["apple"] = 5;
    msi["watermelon"] = 2;
    msi["pear"] = 3;
    msi["peach"] = 5;
    msi["cherry"] = 10;

    vector<pair<string, int>> vpi(msi.begin(), msi.end());
    sort(vpi.begin(), vpi.end(), cmp);

    for(auto item: vpi){
        cout << item.first << " " << item.second << endl;
    }

    return 0;
}
// out


使用sort对list排序

sort() 函数模板定义在头文件 algorithm 中,要求使用随机访问迭代器。但 list 容器并不提供随机访问迭代器,只提供双向迭代器,因此不能对 list 中的元素使用 sort() 算法。但是,还是可以进行元素排序,因为 list 模板定义了自己的 sort() 函数。sort() 有两个版本:无参 sort() 函数将所有元素升序排列。第二个版本的 sort() 接受一个函数对象或 lambda 表达式作为参数,这两种参数都定义一个断言用来比较两个元素。

list排序示例


int main(){
    list<string> ls = {"one", "two", "three"};
    ls.sort([](const string& a, const string& b){
                return a < b;
            });
    for(string item: ls) cout << item << " ";

    return 0;
}
// out


参考文献

C++中SORT函数使用方法

C++ sort()排序函数用法详解

C++ Lambda表达式详解

STL-map的简单用法

C++ STL中Map的按Key排序和按Value排序

C++ list(STL list)排序及合并元素方法详解

到此这篇关于C++使用sort对容器排序的实现的文章就介绍到这了,更多相关C++ sort对容器排序 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++使用sort对容器排序的实现

本文链接: https://lsjlt.com/news/126502.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++使用sort对容器排序的实现
    本文主要解决以下问题 STL中sort的使用方法 使用sort对vector的排序 使用sort对map排序 使用sort对list排序 ...
    99+
    2024-04-02
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-03-01
    c++
  • JavaScript如何使用sort实现数字排序
    这篇文章给大家分享的是有关JavaScript如何使用sort实现数字排序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。sort数字排序//指定排序函数 function&nbs...
    99+
    2024-04-02
  • ajax返回的json内容如何进行排序使用sort()方法实现
    ajax返回的json内容如何进行排序使用sort()方法实现,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 关键...
    99+
    2024-04-02
  • 如何正确使用C++sort函数实现定制排序功能
    sort 函数利用自定义比较函数实现定制排序:编写比较函数:指定排序规则,定义参数类型和返回值。调用 sort 函数:将自定义比较函数作为第三个参数,对容器中的元素进行排序。示例:按降序...
    99+
    2024-04-02
  • 怎么用php的sort实现一个排序
    在php中,sort可以用于对数值数组进行升序排序,语法为“sort(要进行排序的数组,规定如何排序数组的元素)”;如果排序成功,返回的结果是true,若失败则返回false,规定如何排序数组的元素参数默认是“1”,表示每一项按常规顺序排列...
    99+
    2022-06-23
    php
  • 如何用php的sort实现一个排序
    本篇内容主要讲解“如何用php的sort实现一个排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用php的sort实现一个排序”吧!在php中,sort可以用于对数值数组进行升序排序,语法...
    99+
    2023-07-02
  • Excel如何用SORT函数实现排序
    Excel中可以使用SORT函数来实现排序。SORT函数可以对指定的列或区域进行排序,并返回一个按照指定排序顺序的新数组。SORT函...
    99+
    2023-09-15
    excel
  • Java的sort的排序及使用详解
    目录1.按升序排列:2. 随机排序:3.按降序排列:4.根据参数属性值排序5. 根据参数不同,来确定是升序排列,还是降序排序总结sort() 方法在适当的位置对数组的元素进行排序,并...
    99+
    2024-04-02
  • c++中的排序函数sort的具体用法
    std::sort函数的使用包括:定义需要排序的容器或数组。调用std::sort,指定迭代器范围。可选:提供自定义比较器以进行自定义排序。注意:std::sort直接对原容器进行排序,...
    99+
    2024-05-01
    c++
  • Mongodb中怎么使用sort()方法对数据进行排序
    这篇文章主要介绍Mongodb中怎么使用sort()方法对数据进行排序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python中使用sort()方法可以对列表排序,在编程数据库MongoDB中,排序方法也是sort...
    99+
    2023-06-14
  • C++中最常用的容器用法与排序实例
    目录引述vector用法其他说明map用法其他说明set用法其他说明string用法总结引述 C++ 的 STL 容器分为顺序容器和关联容器。 顺序容器:vector、deque、...
    99+
    2024-04-02
  • vue给数组中对象排序sort函数的用法
    目录vue给数组中对象排序 sort函数vue小技巧:简单排序和对象排序对于数组里面全是number对于一个对象 有多种类型vue给数组中对象排序 sort函数 开发穿梭框的时候,需...
    99+
    2024-04-02
  • 怎么在php中使用sort函数对数组进行排序
    本篇文章为大家展示了怎么在php中使用sort函数对数组进行排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hyper...
    99+
    2023-06-14
  • PHP中怎么利用sort()函数实现数组排序
    PHP中怎么利用sort()函数实现数组排序,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一般数组中的各元素均以字符或数字表现的,所以可对数组元素进行升序排列,...
    99+
    2023-06-17
  • 使用C中的列对ListView进行排序
    在C中使用List View进行排序的方法如下:1. 首先,定义一个callback函数来进行比较排序。该函数可以根据需要自定义比较...
    99+
    2023-09-07
    C
  • golang 使用sort.slice包实现对象list排序
    目录1.sort.Sort介绍1.1分析内置sort包1.2分析sort.go2.使用方法2.1基础类型排序2.2对象排序(单一字段)2.3对象排序(多字段)3.sort.Slice...
    99+
    2024-04-02
  • SpringBoot中JPA实现Sort排序的三种方式小结
    目录环境说明前置说明方法1: 基于特殊参数的排序方法2: 基于自定义的@Query进行排序方法3: 基于Pageable中的Sort字段总结引言: 在Spring Boot应用中,基...
    99+
    2024-04-02
  • python如何使用内置Sort()方法对复杂的迭代进行排序
    小编给大家分享一下python如何使用内置Sort()方法对复杂的迭代进行排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用内置的Sort()方法对复杂的迭代...
    99+
    2023-06-27
  • Java使用Arrays.sort()方法实现给对象排序
    目录使用Arrays.sort()方法给对象排序麻烦的方法Arrays.sort()方法浅谈Arrays.sort()原理例子1基础知识点例子2双轴快排另外参考了其他博文,算法思路如...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作