说我有一个像这样的一维列表
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);
}
};
答案 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