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

时间:2017-01-11 08:33:03

标签: c++ arrays node.js sorting

说我有一个像这样的一维列表

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);
    }
};

1 个答案:

答案 0 :(得分:1)

假设您的数组(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',但这假设您只有0和{{1}之间的数字}。

如果您想对第一个字符的排序设置优先顺序,则只需执行标准9

std::sort
相关问题