std::binary_function使用

可以作为参数比较器

binary_function原型
template<class Argv1, class Argv2, class Result>
	struct binary_function
	{
		typedef Arg1 first_argument_type;
		typedef Arg2 second_argument_type;
		typedef Result result_type;
	}
//头文件
#include <functional>
测试代码
  1. 继承binary_function可以作为map的第三个参数传入
class MyDefineKey
{
public:
    MyDefineKey(const int KeyOne, const int KeyTwo):m_KeyOne(KeyOne), m_KeyTwo(KeyTwo)
    {
    }

    bool operator ==(const MyDefineKey &val)const
    {
        if(val.m_KeyOne == m_KeyOne && val.m_KeyTwo == m_KeyTwo) return  true;

        return false;
    }

    bool operator <(const MyDefineKey &val)const
    {
        if(val.m_KeyOne > m_KeyOne && val.m_KeyTwo > m_KeyTwo) return true;

        return false;
    }
    int m_KeyOne;
    int m_KeyTwo;
};
struct BF : std::binary_function<MyDefineKey, MyDefineKey, bool>
{
    bool operator()(const MyDefineKey& left, const MyDefineKey& right)const
    {
        return left.m_KeyOne < right.m_KeyOne;
    }
};

void TestBinaryFunc()
{
        cout << "Test Binanry Func"<<endl;

        std::map<MyDefineKey, int, BF> BFMap;

    for(int i = 1; i <= 4; ++i)
    {
        MyDefineKey key3(i-1,i);
        BFMap[key3] = i;
    }
    for(std::map<MyDefineKey, int>::iterator it = BFMap.begin(); it != BFMap.end(); ++it)
    {
        cout << "Key : ( " << it->first.m_KeyOne << "," << it->first.m_KeyTwo << ") value:" << it->second <<endl;
    }

}
#include <iostream>
#include <functional>

using namespace std;

template<class Compare>
struct MyBinaryFunc : std::binary_function<Compare, Compare, bool >
{
    bool operator()(const Compare & x, const Compare & y ) const
    {
        return x > y;
    }
};

template<class DefineType>
int CompareFunction(DefineType i, DefineType j)
{
    //可以作为模板传入不同类型的参数
    if(MyBinaryFunc<DefineType>()(i, j))
    {
        cout << "Binary_function true"<< endl;
    }
    else
    {
        cout << "Binary_function false" << endl;
    }
}
int main()
{
   CompareFunction<int>(1,100); 
   TestBinaryFunc();
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值