引言
本文针对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 operandsreturn (_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 operandsreturn (_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;
}
以上仅记录。
特别关注
平台类型 | x64 | x86 |
---|---|---|
int | 4 | 4 |
float | 4 | 4 |
double | 8 | 8 |
long long | 8 | 8 |
string | 40 | 28 |
void* | 8 | 4 |
以上特别关注为vs2017上运行的结果。仅以记录。