bool pred(int k, int l, int num1, int num2)
{
return (num1 < num2);
}
int main()
{
vector <int> nums;
for (int i=50; i > 0; --i)
{
nums.push_back(i);
}
std::sort (nums.begin(), nums.end(), boost::bind(&pred, 5, 45));
}
I am a boost newbie. I was learning to use boost::bind and I wanted to sort a vector of integers and get rid of all those elements in the vector that are greater than 45 and less than 5. Had a hard time doing it. Would be great if anyone could help me do it?
The reason I am facing problem is because I am trying to get rid of a vector element while iterating through the vector to sort it. I know it would be much easier if i sort it first and then remove elements from it. But I want to do it this way. Any help is appreciated.
Your idea is not quite possible as std::sort can only affect the ordering of your vector and cannot modify the values themself.
The closet thing I can think of that would approximate what you want is to have all the valid values (those that are >= 5 and <= 45) come before invalid values but have both the valid and invalid value sorted.
There many ways to do it. The easiest is to first remove all unwanted elements and then sort:
Note that when using boost bind you need to include the placeholder (_1), that tells it which argument is the one being iterated over.
If you prefer to to it in one step, you could conditionally copy all your ints to a multiset, which sort the items for you:
You can't do that from
sort
.Remove the elements before or after
sort
.Though you really don't need
boost::bind
at all. Heck, we can make it a bit more generic too: