Los desencadenantes de clasificación de C++ afirman el error "Expresión: operador no válido <" razones y soluciones

#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;   
}

Supongo que te gusta

Origin blog.csdn.net/u013404885/article/details/128351220
Recomendado
Clasificación