STL stable_sort算法的第三个参数

stable_sort定义

template <class RandomAccessIterator>
  void stable_sort ( RandomAccessIterator first, RandomAccessIterator last );

template <class RandomAccessIterator, class Compare>
  void stable_sort ( RandomAccessIterator first, RandomAccessIterator last,
                     Compare comp );

第三个参数comp
它是一个二元函数,返回一个bool值。他决定了第一个元素是否在第二个前面,简单来说,如果返回true顺序就是参数顺序,反之,则是参数反序。
Binary function that accepts two elements in the range as arguments, and returns a value convertible to bool. The value returned indicates whether the element passed as first argument is considered to go before the second in the specific strict weak ordering it defines.
The function shall not modify any of its arguments.
This can either be a function pointer or a function object.

用法

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

struct student
{
	student(string name ,int id,double stature):m_name(name),m_id(id),m_stature(stature){}
	string m_name;	     //名字
	int m_id;            //学号
	double m_stature;    //身高

};

//student对象从高到低排列
bool comp(student s1, student s2)
{
	return s2.m_stature<s1.m_stature;
}


int main()
{
	student stud1("XiaoMing", 1, 170.22);
	student stud2("LiLei", 2, 165.33);
	student stud3("XiaoHong", 3, 156.89);

	vector<student> students={ stud1 ,stud2 ,stud3 };
	stable_sort(students.begin(), students.end(), comp);

	for (auto s : students)

	{
		cout << s.m_stature << endl;
	}


	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,stable_sort是一种稳定排序算法,它基于归并排序实现。稳定排序意味着排序后元素之间的相对位置不会发生变化。stable_sort适用于对比较复杂的数据进行排序,比如订单数据中已经按照订单号排好了,现在想对交易日期再进行排序。stable_sort的时间复杂度为O(NlogN),空间复杂度为O(N)。\[2\] 在STL中,stable_sort的实现实际上就是归并排序。然而,由于归并排序需要额外的数组来执行归并操作,所以如果没有足够的空间,就无法正常进行归并。STL中的stable_sort通过开辟一个缓冲数组来解决这个问题。如果开辟缓冲数组失败,就会调用内部的inplace_stable_sort函数进行排序;如果有足够的空间,就会执行归并操作。\[1\] 另外,STL中的归并排序在底层使用了插入排序。它先调用chunk_insertion_sort函数对每个长度为chunk_size的子区间进行插入排序,然后再进行归并操作。\[3\] 总结起来,C++的stable_sort是一种稳定排序算法,基于归并排序实现。它适用于对比较复杂的数据进行排序,时间复杂度为O(NlogN),空间复杂度为O(N)。在STL中,stable_sort的实现使用了缓冲数组和插入排序。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [C++编程之stable_sort](https://blog.csdn.net/sinat_22336563/article/details/72630655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C++中stable_sortsort学习及简单实现](https://blog.csdn.net/u012328476/article/details/124975509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值