Полный код находится на https://gist.github.com/1341623
Я бы хотел отсортировать массив индекса (или вектор) для другого вектора, чтобы массив упорядочивался по индексу другого вектора.Однако тип vector :: at не может быть разрешен.
Я попытался сделать следующее:
Это нормально
sort(v.begin(), v.end());
Я бы хотел отсортироватьиндексы в соответствии с массивом, но заполнители не перегружают оператор []
sort(index,index+10, a[_1] < a[_2]);
Однако они перегружают оператор + и оператор *
sort(index,index+10, *(a+_1) < *(a+_2));
Я бы хотел отсортировать индексы пок вектору, но компилятор не может разрешить тип `vector :: at '.
sort(index,index+10,
bind(&(vector<int>::at), &v, _1) < bind(&(vector<int>::at), &v, _2));
// error: no matching function for call
// to ‘bind(<unresolved overloaded function type>, ...
После поиска в Интернете я обнаружил, что должен указать перегруженный тип метода, но компилятор все еще говорит, что не можетразрешите тип.
sort(index,index+10,
bind(&static_cast<const int (*)(size_t)>(vector<int>::at), &v, _1)
< bind(&static_cast<const int (*)(size_t)>(vector<int>::at), &v, _2));
// error: invalid static_cast from type ‘<unresolved overloaded function type>’
// to type ‘const int (*)(size_t)’ ...
Я пытался получить версию vector :: at, я хочу, но преобразование, похоже, не удалось.
vector<int>::const_reference (*vector_int_at)(vector<int>::size_type)(vector<int>::at);
sort(index,index+10,
bind(&vector_int_at, &v, _1) < bind(&vector_int_at, &v, _2));
// error: no matches converting function ‘at’ to type ‘const int& (*)(size_t)’ ...
Что я могу сделать для этогопроблема?Или я что-то неправильно понимаю?