Sto cercando di implementare un semplice comparatore per l'ordinamento degli indici in base ai valori in un array "_vec". Ricevo un messaggio di errore di runtime "operatore < non valido". Non riesco a capire che cosa è sbagliato con il codice seguente:Non valido <asserzione operatore in ordinamento
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;
}
};
sto usando la seguente funzione di chiamata:
sort(inds.begin(),inds.end(),Compare(vals));
dove inds è solo una matrice contenente indici da 1 a 15 (diciamo) e vals è l'array di lunghezza 15 con alcuni valori i cui indici ordinati voglio calcolare. L'obiettivo generale è di randomizzare l'ordinamento quando due (o più) voci in val sono uguali. Qualsiasi aiuto?
È necessario utilizzare caratteri di sottolineatura finali (o qualcos'altro per distinguerli) [anziché i caratteri di sottolineatura iniziali] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore -in-ac-identifier). –
@Brian: poiché questi non sono scope del file e il carattere di sottolineatura non è seguito da un carattere maiuscolo, essi sono OK per non essere riservati. Tuttavia, quest'area provoca abbastanza confusione che un'altra convenzione di denominazione potrebbe rendere alcune persone più felici. –
Come nota - se 'vals' ha lunghezza 15, quindi' inds' conviene contenere indici nell'intervallo [0..14], non [1..15]. –