2016-01-11 2 views
-1

Я пытаюсь сортировать вектор пар вторым элементом. Но он не работает, а показывает файл stl_algo.h и показывает ошибку. Вот код ниже. Пожалуйста, игнорируйте мои биты заголовка и использования пространства имен std.And я уже прочитал это>How do I sort a vector of pairs based on the second element of the pair?Вектор сортировки пар не работает

#include<bits/stdc++.h> 
using namespace std; 

struct sort_pred 
{ 
    bool comp(pair< pair<int,int> , double >&l, pair< pair<int,int> , double >&r) 
    { 
     return l.second<r.second; 
    } 
}; 


int main() 
{ 
    vector< pair< pair<int,int> ,double > >arr; 
    int n; 
    scanf("%d",&n); 
    int w,v; 
    pair< pair<int,int> ,double >temp; 
    for(int i=0;i<n;i++) 
    { 
     scanf("%d%d",&w,&v); 
     temp.first.first=w; 
     temp.first.second=v; 
     temp.second=w*1.00/v; 
     arr.push_back(temp); 
    } 
    sort(arr.begin(),arr.end(),sort_pred()); 
    for(int i=0;i<n;i++) 
    { 
     printf("%d %d %f\n",arr[i].first.first,arr[i].first.second,arr[i].second); 
    } 
    return 0; 
} 
+2

Не могли бы вы уточнить причиненные Вами ошибки. –

+0

, и вы не думаете, что показ ошибок поможет нам помочь ... – bolov

+0

Также проверьте [Почему я не должен #include ?] (Http://stackoverflow.com/questions/31816095/ why-should-i-not-include-bits-stdc-h), пожалуйста. –

ответ

1

Если вы используете std::sort вы либо реализовать функцию сравнения (bool func(A, B)):

bool sort_pred_func(const pair<pair<int,int>,double> &l, const pair<pair<int,int>,double> &r) 
{ 
    return l.second < r.second; 
} 

sort(arr.begin(), arr.end(), sort_pred_func); 

или класс comperator с методом bool operator()(A, B);

struct sort_pred 
{ 
    bool operator()(const pair<pair<int,int>,double> &l, const pair<pair<int,int>,double> &r) 
    { 
     return l.second < r.second; 
    } 

}; 

sort(arr.begin(),arr.end(),sort_pred()); 

Но вы не можете его смешивать, как вы.

+0

Сэр я использовал ваш второй метод, но все же он дает ошибку, открывая файл, именующий stl_algo.h, и мой корреспондент дает сообщение об ошибке сообщение линии 2289 ошибка: нет соответствия для вызова на '(sort_pred) (std :: pair Shauqi

+0

Сэр я использую кодовые блоки 13.12 для ide и я включил C++ 11. – Shauqi

+0

Спасибо, что сэр работает. Я вызвал функцию по значению, и я работал. Сэр, вы можете мне сказать, почему звонок по ссылке не работал? – Shauqi

1
struct sort_pred 
{ 
    bool comp(pair< pair<int,int> , double >&l, pair< pair<int,int> , double >&r) 
    { 
     return l.second<r.second; 
    } 
}; 

должен быть

struct sort_pred 
{ 
    bool operator()(pair<pair<int,int>, double> const &l, pair<pair<int,int>, double> const &r) 
    { 
     return l.second<r.second; 
    } 
}; 

3-й аргумент std::sort должен быть функтор, то есть функция, лямбда или вызываемый объект. Для того, чтобы на структуру вызываемая вам нужно определить operator()

Смежные вопросы