Próbuję zaimplementować prosty komparator do sortowania indeksów na podstawie wartości w tablicy "_vec". Otrzymuję komunikat o błędzie "run-time" niepoprawnego operatora <. I nie rozumiem, co jest nie tak z następującego kodu:Niepoprawna <asercja operatora w sortowaniu
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;
}
};
Używam następujące wywołanie funkcji:
sort(inds.begin(),inds.end(),Compare(vals));
gdzie Inds jest tylko tablica zawierająca indeksy od 1 do 15 (powiedzmy) i vals to tablica o długości 15 z pewnymi wartościami, których posortowane indeksy chcę obliczyć. Ogólnym celem jest losowanie kolejności sortowania, gdy dwa (lub więcej) wpisów w vals są równe. Jakaś pomoc?
Należy użyć końcowych podkreśleń (lub czegoś innego, aby je rozróżnić) [zamiast podkreśleń wiodących] (http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore -in-ac-identyfikator). –
@Brian: ponieważ nie są to zakresy plików, a podkreślenie nie jest poprzedzone wielką literą, są one w porządku, jeśli nie są zarezerwowane. Mimo to ten obszar powoduje dość zamieszania, że inna konwencja nazewnictwa może sprawić, że niektórzy ludzie poczują się szczęśliwsi. –
Na marginesie - jeśli 'vals' ma długość 15, to' inds' lepiej zawiera indeksy z przedziału [0..14], a nie [1..15]. –