如何从列表中对(自定义)字符串进行排序

How to sort (custom) strings from a list

本文关键字:字符串 排序 自定义 列表      更新时间:2023-10-16

我使用的是仅包含字符串的列表结构。我必须按长度和字母顺序对它们进行排序。

示例输入:

茶, 电车, 顶部, 三, 部队, 真

结果在:

茶, 三, 顶部, 电车, 真, 部队

我可以根据字符数对字符串进行排序,但我无法按字母顺序重新排序。结果字符串显示:茶,顶部,三。而且它们不是按字母顺序排序的。我正在使用插入排序和辅助列表。

List_pointer<string> odd1(odd);
auto p1 = odd1.next(odd1.begin());
auto p2 = p1;
if (!odd1.empty())
{
    while (!odd1.end(p1))
    {
        p2 = odd1.previous(p1);
    while (p1 != odd1.begin() && ((odd1.read(p2).size()) > (odd1.read(p1).size())))
    {
    {
        auto temp = odd1.read(p1);
        odd1.write(odd1.read(p2),p1);
        odd1.write(temp,p2);
    }
        p1 = odd1.previous(p1);
        p2 = odd1.previous(p1);
    }
    p1 = odd1.next(p1);
   }
}
cout << odd1 << endl;

我知道错误在这里:while (p1 != odd1.begin() && ((odd1.read(p2).size()) > (odd1.read(p1).size())))但我被卡住了。

要使用的比较函数类似于

bool compare_size_then_alpha(const std::string& lhs, const std::string& rhs)
{
    if (lhs.size() != rhs.size()) {
        return lhs.size() < rhs.size();
    }
    return lhs < rhs; // lexical order 
}