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)
请指教.
根据我对你的问题的理解,你想分开odd和even数字.如果是这样的话,std::partition就会这样做.
如果你想升的价值观和不同的排序odd和even数字,我会用类似这样的代码的东西(当然,你必须搞清楚你的哪个组件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参数
为此,您应该使用std::partition而不是std::sort
vector<Point> c;
std::partition(c.begin(),c.end(),isEven)
Run Code Online (Sandbox Code Playgroud)
通过排序,您通常希望排序基于任何两个元素的相对顺序.在这种情况下,您只想根据元素的固有属性对输入进行分区.这两种情况都可以减少到另一种情况,但采用直接方法总是容易一些.