加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 按偶数和奇数排序

发布时间:2020-12-16 10:32:30 所属栏目:百科 来源:网络整理
导读:我想知道是否可以使用std :: sort函数对偶数或奇数进行排序. 我有以下代码,但我不知道如何在std :: sort中实现 inline bool isEven(const Point n) {return n.getX()%2==0;} 它是否正确 vectorPoint c;std::sort(c.begin(),c.end(),isEven) 请指教. 解决方法
我想知道是否可以使用std :: sort函数对偶数或奇数进行排序.

我有以下代码,但我不知道如何在std :: sort中实现

inline bool isEven(const Point n) {
return n.getX()%2==0;
}

它是否正确

vector<Point> c;
std::sort(c.begin(),c.end(),isEven)

请指教.

解决方法

根据我对你的问题的理解,你想要分开奇数和偶数.如果是这样的话,std::partition就会做到这一点.

如果你想按升序值排序并分开奇数和偶数,我会使用类似于这段代码的东西(仍然,你必须找出你想要排序的Point的哪个组件)

bool sortByEven(const int& left,const int& right)
{
    if(left & 1 && right & 1) // both are odd
    {
        return left < right;
    }
    else if(left & 1) // left is odd
    {
        return false;
    }
    else if(right & 1) // right is odd
    {
        return true;
    }

    // both are even
    return left < right;
}

此功能可与std::sort一起使用,这是一个简短的例子:

std::vector<int> numbers;
numbers.push_back(-1);
numbers.push_back(5);
numbers.push_back(12);
numbers.push_back(7);
numbers.push_back(-31);
numbers.push_back(-20);
numbers.push_back(0);
numbers.push_back(41);
numbers.push_back(16);

std::sort(numbers.begin(),numbers.end(),sortByEven);

会给你以下输出:

-20 0 12 16 -31 -1 5 7 41

对于其他类型,只需更改int或使其成为模板参数

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读