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

C++ 如何对包含对的向量进行排序,c++,vector,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> &

我想根据内部对的第一个元素按升序排序,在本例中是
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;
}
#包括
#包括
#包括
使用名称空间std;
布尔函数(常数对&i、常数对&j)
{
i、 第二。第一>n;
而(n--)
{
cin>>a>>b>>c;
pi=配对(a,b);
po=配对(c,pi);
v、 推回(po);
}

您是否忘记了函数中的return语句

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

DR;code但是,您只需将
std::sort
与向量一起使用,
std::pair
s会按字典顺序进行比较,这样您就可以获得所需的行为。如果您注意到编译器警告,您会注意到它说您的
func
函数应该返回
bool
,但不会返回任何内容(即,您缺少一条
返回
语句)。此外,
func
,一旦添加
return
,将按降序排序。@101010他不希望
对的字典顺序
s-我想根据内部对的第一个元素按顺序排序。为了检查逻辑是否正确,您创建了许多具有不同输入的测试用例,并检查函数输出如预期的那样。@Praetorian感谢我承认我没有阅读问题的主体。
bool func(const pair<int,pair<int,int> >&i , const pair<int,pair<int,int> >&j )
{
  return i.second.first < j.second.first ;
 }
#include <utility>