中英文数字字符串排序(标准库)

需求

对ui显示的表格进行排序,需支持中文字母排序,但是sqlite数据库不支持中文的拼音和笔画排序,这样就会导致排序中文显示顺序无规律。这个时候,就需要自己写一个排序功能,且排序支持中文拼音排序。

示例

有一个字符串链表,有n个字符串,需要对这些字符串进行排序(支持中文拼音排序)。
代码定义如下:

QStringList list;
    list<< "1中中句"
        << "方法"
        << "2中句中"
        << "种"
        << "句外"
        << "中中"
        << "句章 "
        << "a强蛟厂"
        << "b甜甜"
        << "章章"
        << "1方法"
        << "rgerag"
        << "efw"
        << "eed"
        << "easw"
        << "我的杀杀杀 "
        << "跳跳框框"
        << "条条奔奔"
        << "希望小学"
        << "小桃"
        << "小涛"
        << "张麻子"
        << "张强"
        << "小李飞刀"
        << "小李他娘"
        << "12五"
        << "874ff的"
        << "哈哈哈,很强";

排序方法

比较函数:

//比较策略
bool LessThan(const QString &s1, const QString &s2)
{
    
    
    return (s1.localeAwareCompare(s2) < 0);
}

标准库中排序函数sort的使用:

std::sort(sList.begin(), sList.end(), LessThan);	//迭代器 + 函数指针

现象

由于代码比较简单,这里就不做demo了,展示排序结果:
在这里插入图片描述
排序结果为:

(“12五”, “1方法”, “1中中句”, “2中句中”, “874ff的”, “a强蛟厂”, “b甜甜”, “easw”, “eed”, “efw”, “rgerag”, “方法”, “哈哈哈,很强”, “句外”, "句章 ", “条条奔奔”, “跳跳框框”, "我的杀杀杀 ", “希望小学”, “小李飞刀”, “小李他娘”, “小涛”, “小桃”, “张麻子”, “张强”, “章章”, “中中”, “种”)

显然排序顺序依次为英文符号、数字、字母、中文符号、中文(拼音)。

如果需要倒序,则将比较函数修改即可:

//比较策略
bool LessThan(const QString &s1, const QString &s2)
{
    
    
    return (s1.localeAwareCompare(s2) > 0);
}

又或者使用rbegin、rend函数进行倒序排序,这样的操作没有试过。

Guess you like

Origin blog.csdn.net/weixin_42887343/article/details/121560355