Q:

sort не работает с std::bind

Почему код не работает, если вместо 3 вставить число меньше 6. И как это можно исправить?
Код должен сортировать вектор с помощью функтора std::greater, который должен применять 1 параметр. Сделать это нужно с помощью std::bind. 
#include <set>
#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <iterator>
#include <string>
#include <functional>
using namespace std;

template<typename T>
static void PrintVector(const std::vector<T> &v)
{
    for (auto iterator = v.begin(); iterator != v.end(); ++iterator)
    {
        std::cout << *iterator << " ";
    }
    std::cout << std::endl;
}

int main()
{       
    vector<int> v = { 1, 8, 7, 4, 3, 6, 2, 5 };
    PrintVector(v);
    auto greater_binded = bind(greater<int>(), placeholders::_1, 3);
    sort(v.begin(), v.end(), greater_binded);
    PrintVector(v);
    return 0;
}

A:

Алгоритм std::sort предполагает наличие strict weak ordering для функций сравнения (25.4 Sorting and related operations)

3 For all algorithms that take Compare, there is a version that uses
  operator< instead. That is, comp(*i, *j) != false defaults to *i < *j
  != false. For algorithms other than those described in 25.4.3 to
  work correctly, comp has to induce a strict weak ordering on the
  values.

Это значит, что не допускается, что если comp( a, b ) есть true, то одновременно и comp( b, a ) также true.
Если вы хотите разбить массив на партиции, то используйте стандартный алгоритм std::partition. Например,
std::partition( v.begin(), v.end(), greater_binded );

Если необходимо, то затем каждую партицию можно отсортировать отдельно.

