当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::sort()用法及代码示例


我们已经在C中讨论了qsort()。C++ STL提供了一种相似的函数排序,该函数对向量或数组(具有随机访问权限的项)进行排序。下面是一个简单的程序,显示sort()的工作。

// C++ program to demonstrate default behaviour of 
// sort() in STL. 
#include <bits/stdc++.h> 
using namespace std; 
  
int main() 
{ 
    int arr[] = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
  
    sort(arr, arr+n); 
  
    cout << "\nArray after sorting using "
         "default sort is:\n"; 
    for (int i = 0; i < n; ++i) 
        cout << arr[i] << " "; 
  
    return 0; 
}

输出:

Array after sorting using default sort is:
0 1 2 3 4 5 6 7 8 9 

因此,默认情况下,sort()以升序对数组进行排序。


如何按降序排序?
sort()采用第三个参数,该参数用于指定元素的排序顺序。我们可以传递“greater()”函数以降序排序。此函数进行比较的方式是将更大的元素放在前面。

// C++ program to demonstrate descending order sort using 
// greater<>(). 
#include <bits/stdc++.h> 
using namespace std; 
  
int main() 
{ 
    int arr[] = {1, 5, 8, 9, 6, 7, 3, 4, 2, 0}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
  
    sort(arr, arr+n, greater<int>()); 
  
    cout << "Array after sorting:\n"; 
    for (int i = 0; i < n; ++i) 
        cout << arr[i] << " "; 
  
    return 0; 
}

输出:

Array after sorting:
9 8 7 6 5 4 3 2 1 0 

如何按特定顺序排序?
我们还可以编写自己的比较器函数并将其作为第三个参数传递。这个“comparator”函数返回一个值;可转换为布尔值,本质上可以告诉我们是否应将传递的“first”参数放在传递的“second”参数之前。
例如:在下面的代码中,假设间隔{6,8}和{1,9}作为参数传递给“compareInterval”函数(比较器函数)。现在,因为i1.first(= 6)> i2.first(= 1),所以我们的函数返回“false”,这告诉我们“first”参数不应该放在“second”参数之前,因此排序将按照{1,9 },然后是{6,8}。

// A C++ program to demonstrate STL sort() using 
// our own comparator 
#include<bits/stdc++.h> 
using namespace std; 
  
// An interval has a start time and end time 
struct Interval 
{ 
    int start, end; 
}; 
  
// Compares two intervals according to staring times. 
bool compareInterval(Interval i1, Interval i2) 
{ 
    return (i1.start < i2.start); 
} 
  
int main() 
{ 
    Interval arr[] =  { {6,8}, {1,9}, {2,4}, {4,7} }; 
    int n = sizeof(arr)/sizeof(arr[0]); 
  
    // sort the intervals in increasing order of 
    // start time 
    sort(arr, arr+n, compareInterval); 
  
    cout << "Intervals sorted by start time:\n"; 
    for (int i=0; i<n; i++) 
       cout << "[" << arr[i].start << "," << arr[i].end 
            << "] "; 
  
    return 0; 
}

输出:

Intervals sorted by start time:
[1,9] [2,4] [4,7] [6,8] 



注:本文由纯净天空筛选整理自 std::sort() in C++ STL。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。