我正在学习使用STL的排序函数,将它用于一些复杂的对矢量。
我有以下矢量:
vector< pair< int , pair< int , pair< string , pair< int , int > > > > >
我需要首先根据对中的第一个整数对元素进行排序,如果有两个元素具有相同的值,那么我需要根据内部存在的整数对它们进行排序对
如果我将上述类型表示为:
vector< pair< I , pair< G , pair< S , pair< T , T > > > > >
首先我需要根据I然后根据G对它们进行排序。这可以通过比较器有效地完成吗?
答案 0 :(得分:1)
调用std::sort(RandomIt first, RandomIt last)
将合适的比较函数传递给comp
。 default 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);