↵
~~~~~↵
#include <bits/stdc++.h>↵
↵
using namespace std;↵
↵
bool comp(const int &a , const int&b)↵
{↵
return ((a > 0 and b > 0) ? true : ((a == 0) ? false : true));↵
}↵
↵
↵
int32_t main()↵
{↵
vector <int> a = {1 , 0 , 0 , 3 , 12};↵
sort(a.begin() , a.end() , comp);↵
for(int &x : a)↵
cout << x << ", " ;↵
cout << endl;↵
return 0;↵
}↵
↵
~~~~~↵
↵
↵
The aim is to move all the zeroes to the back keeping the relative order of all other non-zero elements intact.↵
I thought the comparator would do the job as it changes the relative order of two elements `a` and `b` if `a is equal to 0` and not in any other case, and print the final output as :↵
↵
`0, 0, 1, 3, 12,`↵
↵
However, it printed this : ↵
↵
`12, 3, 1, 0, 0,`↵
↵
Why is the comparator failing?↵
↵
↵
↵
THIS REALLY HELPED : [Custom Comparators](http://https://mirror.codeforces.com/blog/entry/72525)↵
↵
~~~~~↵
#include <bits/stdc++.h>↵
↵
using namespace std;↵
↵
bool comp(const int &a , const int&b)↵
{↵
return ((a > 0 and b > 0) ? true : ((a == 0) ? false : true));↵
}↵
↵
↵
int32_t main()↵
{↵
vector <int> a = {1 , 0 , 0 , 3 , 12};↵
sort(a.begin() , a.end() , comp);↵
for(int &x : a)↵
cout << x << ", " ;↵
cout << endl;↵
return 0;↵
}↵
↵
~~~~~↵
↵
↵
The aim is to move all the zeroes to the back keeping the relative order of all other non-zero elements intact.↵
I thought the comparator would do the job as it changes the relative order of two elements `a` and `b` if `a is equal to 0` and not in any other case, and print the final output as :↵
↵
`0, 0, 1, 3, 12,`↵
↵
However, it printed this : ↵
↵
`12, 3, 1, 0, 0,`↵
↵
Why is the comparator failing?↵
↵
↵
↵
THIS REALLY HELPED : [Custom Comparators](http://https://mirror.codeforces.com/blog/entry/72525)↵
↵