按偶数和奇数排序

M.A*_*M.A 3 c++ sorting stdvector

我想知道是否可以使用std :: sort函数对偶数或奇数进行排序.

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

inline bool isEven(const Point n) {
return n.getX()%2==0;
}
Run Code Online (Sandbox Code Playgroud)

它是否正确

vector<Point> c;
std::sort(c.begin(),c.end(),isEven)
Run Code Online (Sandbox Code Playgroud)

请指教.

ema*_*tel 6

根据我对你的问题的理解,你想分开oddeven数字.如果是这样的话,std::partition就会这样做.

如果你想升的价值观和不同的排序oddeven数字,我会用类似这样的代码的东西(当然,你必须搞清楚你的哪个组件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;
}
Run Code Online (Sandbox Code Playgroud)

这个函数可以用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);
Run Code Online (Sandbox Code Playgroud)

会给你以下输出:

-20 0 12 16 -31 -1 5 7 41
Run Code Online (Sandbox Code Playgroud)

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


ltj*_*jax 5

为此,您应该使用std::partition而不是std::sort

vector<Point> c;
std::partition(c.begin(),c.end(),isEven)
Run Code Online (Sandbox Code Playgroud)

通过排序,您通常希望排序基于任何两个元素的相对顺序.在这种情况下,您只想根据元素的固有属性对输入进行分区.这两种情况都可以减少到另一种情况,但采用直接方法总是容易一些.