struct_and_sort_and_structSort

来源:互联网 发布:压缩的js还原 编辑:程序博客网 时间:2024/06/05 03:33

cpp/Algorithm/sort 和 利用sort对结构体排序

先说sort

cppreference里sort的几种用法:

1.

// sort using a standard library compare function objectstd::sort(s.begin(), s.end(), std::greater<int>());for (auto a : s) {    std::cout << a << " ";}   std::cout << '\n';

2.

// sort using a custom function object    struct {        bool operator()(int a, int b)        {               return a < b;        }       } customLess;    std::sort(s.begin(), s.end(), customLess);    for (auto a : s) {        std::cout << a << " ";    }       std::cout << '\n';

3.

// sort using a lambda expression    std::sort(s.begin(), s.end(), [](int a, int b) {        return b < a;       });    for (auto a : s) {        std::cout << a << " ";    }    std::cout << '\n';

4.

常见的(在函数外/类外写)bool cmp()

#include<iostream>#include<algorithm>#include<array>using namespace std;// 定义sort按非增次序排bool comp(int a, int b) {    return a>b;}int main() {    array<int, 10> r={7,5,4,2,8,6,1,9,0,3};    sort(r.begin(),r.end(),comp);    for(auto a:r) {      cout<<a<<" ";    }    cout<<endl;    return 0;}

对结构体排序

详细代码在GitHub

一. 用sort对结构体中某一值排序

当结构体有模板参数时,上面的’4.’会出错,其它方法可运行

0.

#include<stdio.h>#include<vector>#include<algorithm>#include<iostream>template<class T>struct Pack {   T w1,p1;    double pw;};

1.

template<class T>bool operator<(const Pack<T> &a1, const Pack<T> &a2) {   return a1.pw>a2.pw;}

2.

/*  struct {  bool operator() (struct Pack<T> a1, struct Pack<T> a2) {    return a1.pw>a2.pw;  }}cmp;sort(pack.begin(), pack.end(),cmp); */

当结构体不带模板参数时,sort中的方法’1~4’均可行

二. 重载类型转换符 —《算法分析与设计————C++语言描述(2nd Edition)》

1.

template<class K, class D>struct E {  operator K()const { return key; } // 重载类型转换运算符  K key;  // 关键字可以比较大小  D data; // 其他数据};
0 0