如何对包含对的向量进行排序

how to sort this vector including pairs

本文关键字:向量 排序 包含      更新时间:2023-10-16

我想根据内部对的第一个元素,即本例中的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;
}

您忘记了函数中的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>