2015-06-22 3 views
-1

Я хочу сортировать в порядке возрастания в соответствии с первым элементом внутренней пары, то есть a в этом случае. Но это вовсе не сортировка. Я не уверен, правильная ли моя логика func.как отсортировать этот вектор, включая пары

#include<iostream> 
#include<algorithm> 
#include<vector> 
using namespace std; 

bool func(const pair<int,pair<int,int> >&i , const pair<int,pair<int,int> >&j) 
{ 
    i.second.first < j.second.first ; 
} 


int main() 
{ 
    vector<pair<int,pair<int,int> > > v; 
    pair<int,int> pi; 
    pair<int,pair<int,int> > po; 
    int n,a,b,c,i; 

    cin>>n; 
    while(n--) 
    { 
    cin>>a>>b>>c; 
    pi=make_pair(a,b); 
    po=make_pair(c,pi); 
    v.push_back(po); 
    } 

    cout<<endl; 
    for(i=0;i<v.size();i++) 
    { 
    cout<<v[i].second.first<<" "<<v[i].second.second<<" "<<v[i].first<<endl; 
    } 
    sort(v.begin(),v.end(),func); 
    cout<<endl; 
    for(i=0;i<v.size();i++) 
    { 
    cout<<v[i].second.first<<" "<<v[i].second.second<<" "<<v[i].first<<endl; 
    } 

    return 0; 
} 
+0

DR; кода, но вы просто используете 'std :: sort' с вашим вектором,' std :: pair 'сравниваются по лексикографии, чтобы вы получили желаемое поведение. – 101010

+0

Если бы вы обратили внимание на предупреждения компилятора, вы заметили бы, что функция 'func' должна возвращать' bool', но ничего не возвращает (т. Е. Вам не хватает инструкции 'return'). Кроме того, 'func', как только вы добавляете' return', сортируется в порядке убывания. – Praetorian

+0

@ 101010 Он не хочет лексикографического упорядочивания '' '' '' '' Я хочу сортировать в порядке обслуживания в соответствии с первым элементом внутренней пары * – Praetorian

ответ

0

Вы забыли оператор возврата в функции

bool func(const pair<int,pair<int,int> >&i , const pair<int,pair<int,int> >&j) 
{ 
    i.second.first < j.second.first ; 
} 

Написать вместо

bool func(const pair<int,pair<int,int> >&i , const pair<int,pair<int,int> >&j) 
{ 
    return i.second.first < j.second.first ; 
} 

Кроме того, вы должны включать в себя заголовок <utility>, где определен класс std::pair

#include <utility> 
Смежные вопросы