在一维数组中对二维进行排序

Sorting on two dimensions in a one dimensional array

本文关键字:二维 排序 一维数组      更新时间:2023-10-16

假设我有一个这样的一维列表

A8, C3, C7, F9, A3, V3, J2

如果我想按第一个字符的字母顺序和第二个字符的数字顺序对此列表进行排序,我该怎么做?

假设我必须优先考虑某种排序,并取消次要排序的优先级,例如:

A1, B2, C1

A1肯定会是第一个,但问题是,它应该是:

{A1, C1, B2},还是{A1, B2, C1}

我的最后一个问题是,如果我想优先考虑数字排序,我想我会将其作为第二排序,而不是大多数语言中标准排序算法的第一个排序?

我最关心的是与C++这样的实现进行排序

struct CustomSort{
    bool operator()(tuple<int,regex> const &lhs, tuple<int,regex> const &rhs){
        return std::get<0>(lhs) > std::get<0>(rhs);
    }
};

假设你的数组(arr)是std::string的容器,并且你想要优先考虑数值排序(即 C1 < A3 ),您可以使用对 std::sort 的单个调用来做到这一点(我在这里使用的是 c++11 lambda,但如果需要,您可以使用自定义Comparator):

std::sort(begin(arr), end(arr), [](std::string const& lhs, std::string const& rhs) {
    return std::tie(lhs[1], lhs[0]) < std::tie(rhs[1], rhs[0]);
});

我不会将第二个char转换为int,因为标准保证'0' < '1' < ... < '9',但这假设您只有 09 之间的数字。

如果要优先排序第一个字符,则只需执行标准std::sort

std::sort(begin(arr), end(arr));