C++ 如何在C+中使用指针类型比较器声明集合+;?
我有一个结构,用于比较指针:C++ 如何在C+中使用指针类型比较器声明集合+;?,c++,C++,我有一个结构,用于比较指针: template < class ptype > struct lessThan : public binary_function < ptype *, ptype *, bool > { bool operator() (ptype *lhs, ptype *rhs) { return lhs->key() < rhs->key(); } }; 模板 结构:公共二进制函数 { 布尔运算符()(ptype*lhs
template < class ptype >
struct lessThan : public binary_function < ptype *, ptype *, bool >
{
bool operator() (ptype *lhs, ptype *rhs) { return lhs->key() < rhs->key(); }
};
模板
结构:公共二进制函数
{
布尔运算符()(ptype*lhs,ptype*rhs){返回lhs->key()key();}
};
假设我想使用这个比较器创建一组对象指针。声明集合时,正确的语法是什么?我是这样想的:
set <Object *, lessThan> mySet;
设置mySet;
或更像函数指针:
set <Object *, lessThan<Object>()> mySet;
设置mySet;
…但我无法编译它。有什么建议吗?模板类
std::set
将概念的一种类型Compare
作为第二个模板参数。因此,在您的情况下,类型将是小于
这将使正确的声明为:
std::set<Object*, lessThan<Object>> x;
std::set x;
您的第一次尝试不正确,因为lessThan
不是类型,而是类模板。您的第二次尝试不正确,因为lessThan()
是一个解析为返回lessThan
的函数,从技术上讲,lessThan()
是一个类型。它不是正确的类型。它被解析为一个类型id—“函数()返回lessThan
”。