Estoy tratando de implementar un comparador simple para ordenar los índices basado en los valores de una matriz "_vec". Recibo un mensaje de error de "operador < sin validez". No entiendo lo que está mal con el siguiente código:Invalid <aserción del operador en el género
class Compare{
vector<int>& _vec;
public:
Compare(vector<int>& vec) : _vec(vec) {}
bool operator()(size_t i, size_t j){
if(_vec[i] != _vec[j])
return _vec[i] < _vec[j];
else
return (double)rand()/RAND_MAX < 0.5;
}
};
estoy usando la siguiente función llamada:
sort(inds.begin(),inds.end(),Compare(vals));
donde inds es sólo una matriz que contiene los índices de 1 a 15 (por ejemplo) y vals es la matriz de longitud 15 con algunos valores cuyos índices ordenados quiero calcular. El objetivo general es aleatorizar el orden de clasificación cuando dos (o más) entradas en vals son iguales. ¿Alguna ayuda?
Debe usar guiones bajos finales (u otra cosa para distinguirlos) [en lugar de guiones bajos] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-un-underscore -in-ac-identificador). –
@Brian: dado que estos no son el alcance del archivo y el guión bajo no es seguido por un carácter en mayúscula, están bien para no ser reservados. Aún así, esta área causa suficiente confusión como para que otra convención de nombres pueda hacer que algunas personas sean más felices. –
Como nota: si 'vals' tiene longitud 15, entonces' inds' debería contener índices en el rango [0..14], no [1..15]. –