可以作为参数比较器
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;
}
//头文件
测试代码
- 继承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;
}
}
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;
}