如何对矢量&lt;进行排序对&LT; int,pair <int,=“”pair <string =“”,=“”pair <int =“”,=“”int =“”>&gt; &GT; &GT; &GT;?</int>的

时间:2013-11-23 22:53:10

标签: c++ sorting vector stl

我正在学习使用STL的排序函数,将它用于一些复杂的对矢量。

我有以下矢量:

vector< pair< int , pair< int , pair< string , pair< int , int > > > > >

我需要首先根据对中的第一个整数对元素进行排序,如果有两个元素具有相同的值,那么我需要根据内部存在的整数对它们进行排序对

如果我将上述类型表示为:

vector< pair< I , pair< G , pair< S , pair< T , T > > > > >

首先我需要根据I然后根据G对它们进行排序。这可以通过比较器有效地完成吗?

2 个答案:

答案 0 :(得分:1)

调用std::sort(RandomIt first, RandomIt last)将合适的比较函数传递给compdefault comparison function会按照您想要的方式比较元素。

答案 1 :(得分:0)

对于您的特定情况,std::pair中的默认比较将起作用。

http://en.cppreference.com/w/cpp/utility/pair/operator_cmp

template< class T1, class T2 >
bool operator<( const pair<T1,T2>& lhs, const pair<T1,T2>& rhs );

使用一个递归步骤应用此规则,以查看是这种情况:

  

如果lhs.first&lt; rhs.first,返回true。否则,如果   rhs.first&lt; lhs.first,返回false。否则,如果   lhs.second&lt; rhs.second,返回true。否则,返回false。

在C ++ 11中,如果需要在运行时选择排序条件,可以使用lambda进行比较。它应该对类型进行const引用,并返回bool。

这就是它的样子。

typedef pair< int , pair< int , pair< string , pair< int , int > > > > MyComplexType;
std::vector<MyComplexType> v;
// fill v

// sort
auto complexLessThan = [](const MyComplexType& left, const MyComplexType& right)  -> bool
{
    // your sorting criterion here           
}

std::sort(v.begin(), v.end(), complexLessThan);