#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const int a, const int b)
{
if (a != b)
return a < b;
else
return true;
}
int main()
{
vector<int> arr;
arr.push_back(1);
arr.push_back(9);
arr.push_back(9);
arr.push_back(2);
::sort(arr.begin(), arr.end(), cmp);
for (int i = 0; i < arr.size(); i++)
std::cout << arr[i];
return 0;
}
El código anterior activará el error de afirmación "Expresión: operador no válido <". El motivo del error es que la función cmp() devuelve verdadero si a y b son iguales.
La función de clasificación cree que la situación en la que a y b son iguales debería ser una clasificación estable y los valores de a y b no deberían intercambiarse, es decir, cmp (a, b) no debería devolver verdadero y cmp. (b, a) ambos quieren intercambiar Ubicación.
La solución es devolver falso cuando a y b son iguales y el orden no es necesario, podemos modificar cmp como:
bool cmp(const int a, const int b)
{
return a < b;
}