gpt4 book ai didi

c++ - 合并两种

转载 作者:行者123 更新时间:2023-12-03 07:08:54 24 4
gpt4 key购买 nike

考虑使用以下数组(或c++ vector ):

vector<int> a {1,3,6,5,41,8,13};
stable_sort(a.begin(), a.end(), [](int a, int b) {return a<b;});
stable_sort(a.begin(), a.end(), [](int a, int b) {return a%2 < b%2;});
此代码首先按值对 vector 排序,然后将所有偶数放在第一个元素中。结果是:
{e1, e2, ... en, o1, o2, ... ok}
其中e1 ... en-偶数,e1 <= e2 <= ... <= en
o1 ... ok奇数,o1 <= o2 <= ... <= ok
问题是:如何将这两种排序合并到一个stable_sort调用中,以使结果保持不变?
stable_sort(a.begin(), a.end(), [](int a, int b) {/*what goes here?*/});

最佳答案

将两个条件与OR运算符组合。确保在a % 2 > b % 2时第二个子句不会触发:

stable_sort(a.begin(), a.end(), [](int a, int b) {
return (a % 2 < b % 2) || ((a % 2 == b % 2) && a < b);
});
您可以利用元组按字段进行排序的事实来使它更好一些:
stable_sort(a.begin(), a.end(), [](int a, int b) {
return std::make_tuple(a % 2, a) < std::make_tuple(b % 2, b);
});
您现在不再需要 stable_sort,但无论如何我还是把它留了下来。

关于c++ - 合并两种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64221984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com