C++自定义实现比较器

 更新时间:2024年01月16日 17:01:13   作者:莫浔  
这篇文章主要为大家详细介绍了如何使用C++自定义实现比较器,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下

sort() 中的比较函数 compare 要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错。

cmpChar实现功能:大写字母大于小写字母,小写字母按 a-z 升序,大写字母按 A-Z 升序

1 在类内部定义比较器

声明为静态成员函数

class Solution {
public:
    void CharacterSort(const vector<char> e_char)
    {
      cout << "before:" << endl;
        for (auto i : e_char) {
            cout << i;
        }
        cout << endl;

        std::sort(e_char.begin(), e_char.end(), cmpChar);
        cout << "after:" << endl;
        for (auto i : e_char) {
            cout << i;
        }
        cout << endl;
    }

private:
    static bool cmpChar(const char &a, const char &b)
    {
        if (a <= 'Z' && b >= 'a')
            return false;
        else if (b <= 'Z' && a >= 'a')
            return true;
        else
            return a < b;
    }

};

输入:
vector e_char = {‘C’,‘B’,‘A’,‘c’,‘b’,‘a’};
输出:
before:
CBAcba
after:
abcABC

2 在函数内部定义比较器

lamda表达式

class Solution {
public:
    void CharacterSort(const vector<char> e_char)
    {
      cout << "before:" << endl;
        for (auto i : e_char) {
            cout << i;
        }
        cout << endl;
        auto cmpChar = [](const char &a, const char &b) {
            if (a <= 'Z' && b >= 'a')
                return false;
            else if (b <= 'Z' && a >= 'a')
                return true;
            else
                return a < b;
        };

        std::sort(e_char.begin(), e_char.end(), cmpChar);
        cout << "after:" << endl;
        for (auto i : e_char) {
            cout << i;
        }
        cout << endl;
    }

3 全局函数比较器

using namespace std;

bool cmpChar(const char &a, const char &b)
    {
        if (a <= 'Z' && b >= 'a')
            return false;
        else if (b <= 'Z' && a >= 'a')
            return true;
        else
            return a < b;
    }

class Solution {
public:
    void CharacterSort(const vector<char> e_char)
    {
      cout << "before:" << endl;
        for (auto i : e_char) {
            cout << i;
        }
        cout << endl;

        std::sort(e_char.begin(), e_char.end(), cmpChar);
        cout << "after:" << endl;
        for (auto i : e_char) {
            cout << i;
        }
        cout << endl;
    }

以上就是C++自定义实现比较器的详细内容,更多关于C++比较器的资料请关注脚本之家其它相关文章!

相关文章

  • C++ OpenCV实战之网孔检测的实现

    C++ OpenCV实战之网孔检测的实现

    这篇文章主要介绍了如何利用C++和OpenCV实现网孔检测,文中的示例代码讲解详细,对我们学习OpenCV有一定帮助,感兴趣的小伙伴可以了解一下
    2022-05-05
  • C++实现飞机订票系统

    C++实现飞机订票系统

    这篇文章主要为大家详细介绍了C++实现飞机订票系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C/C++计算程序执行时间的几种方法实现

    C/C++计算程序执行时间的几种方法实现

    本文主要介绍了C/C++计算程序执行时间的几种方法实现,包括使用clock()函数、使用库和使用time.h头文件中的time()函数,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • C/C++实现通讯录管理系统(附源码)

    C/C++实现通讯录管理系统(附源码)

    这篇文章主要为大家详细介绍了如何利用C++实现通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-12-12
  • C++左值与右值核心判断方法

    C++左值与右值核心判断方法

    C++ 11 引入右值引用和移动语义后,左值右值的区分变得更加重要,本文介绍C++左值与右值核心判断方法,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2026-06-06
  • C++中使用FFmpeg适配自定义编码器的实现方法

    C++中使用FFmpeg适配自定义编码器的实现方法

    本文介绍了在C++中使用FFmpeg库进行自定义编码器适配的实现方法。文章通过具体的代码示例,介绍了FFmpeg的基本使用方法和自定义编码器的实现过程,帮助读者了解如何在C++中进行音视频编码和解码的开发工作,并能够实现自定义的编码器适配
    2023-04-04
  • C语言超详细讲解双向带头循环链表

    C语言超详细讲解双向带头循环链表

    带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单
    2023-02-02
  • QTableWidget设置只让某一列可编辑的实现

    QTableWidget设置只让某一列可编辑的实现

    本文介绍了如何将QTableWidget的某一列设置为可编辑,以便用户可以输入自定义数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • c语言clock函数使用示例

    c语言clock函数使用示例

    这篇文章主要介绍了c语言clock函数使用示例,需要的朋友可以参考下
    2014-04-04
  • C/C++可变参数的使用

    C/C++可变参数的使用

    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    2013-09-09

最新评论