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