Aserción error al ordenar STL Vector mediante Custom predicado

Fuente: Soporte técnico de Microsoft

PUBLICACIÓN RÁPIDA

PUBLICACIÓN RÁPIDA ARTÍCULOS PROPORCIONAN INFORMACIÓN DIRECTAMENTE DESDE DENTRO DE LA ORGANIZACIÓN DE SOPORTE TÉCNICO DE MICROSOFT. LA INFORMACIÓN CONTENIDA EN ESTE DOCUMENTO SE CREA EN RESPUESTA A EMERGENTES O ÚNICOS TEMAS, O ESTÁ PREVISTO SUPLEMENTO OTRA INFORMACIÓN DE KNOWLEDGE BASE.

Acción

Ordenar cualquier colección STL mediante stable_sort() o sort() con elementos duplicados con el predicado siguiente personalizado


BOOL CustPredicate (int elem1, elem2 int)
{
    if(elem1 > elem2)
devolver true;

Si (elem1 < elem2)
devolver false;
devolver true;
}







Resultado

Funciona bien en Visbual C++ 2002 y Visual C++ 2003.
Inicia y error, error de aserción "expresión: operador no válido <" en Visual C++ 2005 y /2008 de Visual C++.

Causa



Los algoritmos STL para stable_sort() y sort() requieren el predicado binario a ser estricto orden de débil.

Por ejemplo:

· Estricto: pred (X, X) siempre es false.

· Débil: Si! pred (X, Y) & &! pred (Y, X), X == Y.

· Ordenación: Si pred (X, Y) & & pred (Y, Z), a continuación, pred (X, Z).







Solución

A continuación en cualquiera de las opciones resolverá el problema

Primera opción:-

BOOL CustPredicate (int elem1, elem2 int)
{
    if(elem1 > elem2)
devolver true;

Si (elem1 < elem2)
devolver false;

devolver false; Debe devolver false si ambos los valores son los mismos
}



Segunda opción:-
BOOL CustPredicate (int elem1, elem2 int)
{
devolver elem1 > elem2;
}








DESCARGO DE RESPONSABILIDAD

NI MICROSOFT NI SUS PROVEEDORES GARANTIZAN O GARANTÍA SOBRE LA IDONEIDAD, FIABILIDAD O EXACTITUD DE LA INFORMACIÓN CONTENIDA EN LOS DOCUMENTOS Y GRÁFICOS RELACIONADOS PUBLICAN EN ESTE SITIO WEB (LOS "MATERIALES") PARA CUALQUIER PROPÓSITO. LOS MATERIALES PUEDEN INCLUIR IMPRECISIONES TÉCNICAS O ERRORES TIPOGRÁFICOS Y PODRÁN REVISARSE EN CUALQUIER MOMENTO SIN PREVIO AVISO.


EN LA MÁXIMA MEDIDA PERMITIDA POR APLICABLE LEY, MICROSOFT Y SUS PROVEEDORES RENUNCIAN A Y EXCLUIR TODAS LAS REPRESENTACIONES, GARANTÍAS Y CONDICIONES YA SEA EXPRESA, IMPLÍCITA O ESTATUTARIA, INCLUYENDO PERO SIN LIMITARSE A REPRESENTACIONES, GARANTÍAS O CONDICIONES DE TÍTULO, NO INFRACCIÓN, CONDICIÓN SATISFACTORIA O CALIDAD, COMERCIABILIDAD Y APTITUD PARA UN FIN DETERMINADO, CON RESPECTO A LOS MATERIALES.
Propiedades

Id. de artículo: 949171 - Última revisión: 14 ene. 2017 - Revisión: 1

Comentarios