如何对这个向量进行排序,包括对

时间:2015-06-22 20:42:11

标签: c++ vector

我想根据内部对的第一个元素按升序排序,即在这种情况下为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;
}

1 个答案:

答案 0 :(得分:0)

您忘记了函数

中的return语句
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>