记录greater和less

引言

本文针对C++11中greater和less做简单的记录。本文使用visual studio 2017下控制台输出程序可以直接使用c++11特性。

内部实现

查看greater和less会看到其下面的实现;

template<class _Ty = void>
	struct greater
	{	// functor for operator>
	_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
	_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
	_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

	constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
		{	// apply operator> to operands
		return (_Left > _Right);
		}
	};

		// STRUCT TEMPLATE less
template<class _Ty = void>
	struct less
	{	// functor for operator<
	_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty first_argument_type;
	_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef _Ty second_argument_type;
	_CXX17_DEPRECATE_ADAPTOR_TYPEDEFS typedef bool result_type;

	constexpr bool operator()(const _Ty& _Left, const _Ty& _Right) const
		{	// apply operator< to operands
		return (_Left < _Right);
		}
	};

如何使用

结合上面的实现来看看如何使用greater和less。下面是使用过程中的一些记录。

#include <iostream>
#include <functional>
#include <algorithm>//sort
using namespace std;

int main()
{
	int array[] = {2,4,1,78,55,34,8};
	int len = sizeof(array) / sizeof(int);
	sort(array,array+len,greater<int>());//从大到小排序
	for (auto i:array) 
	{
		cout << i << " ";
	}
	cout << endl;
	sort(array,array+len,less<int>());//从小到大排序
	for (int i:array) 
	{
		cout << i << " ";
	}
	cout << endl;
	return 0;
}

greater与less同为函数模板,上面是int类型的使用,下面看看char类型的使用,实质是一样的。

#include <iostream>
#include <functional>
#include <algorithm>//sort
using namespace std;

int main()
{
	char array[] = {'g','e','s','a','v','f'};
	int len = sizeof(array) / sizeof(char);
	sort(array,array+len,greater<char>());
	for (auto i:array) 
	{
		cout << i << " ";
	}
	cout << endl;
	sort(array,array+len,less<char>());
	for (char i:array) 
	{
		cout << i << " ";
	}
	cout << endl;
	return 0;
}

当然除了上述的int,char类型还可以是string类型,下面是string类型下greater与less的使用。

#include <iostream>
#include <functional>
#include <algorithm>//sort
#include <string>//必须包含string头文件才可以进行相关的cout操作
using namespace std;

int main()
{
	string array[] = {"sdf","aww","sdfr","hellos","good","last"};
	/*const int len = 6;*/
	int len = sizeof(array) / sizeof(array[0]);
	sort(array,array+len,greater<string>());
	for (auto i:array) 
	{
		cout << i << " ";
	}
	cout << endl;
	sort(array,array+len,less<string>());
	for (string i:array) 
	{
		cout << i << " ";
	}
	cout << endl;
	return 0;
}

以上仅记录。

特别关注

平台类型x64x86
int44
float44
double88
long long88
string4028
void*84

以上特别关注为vs2017上运行的结果。仅以记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩上风骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值