c++指针比较器未编译

标签 c++ arrays visual-studio pointers

我想对指针数组进行排序,但是 VS 无法编译,说

'testClass::compareItems': non-standard syntax; use '&' to create a pointer to member

比较器看起来像这样:

bool testClass::compareItems(ElementType *a, ElementType *b)
{       
    return elementToProfit[a] / a->w() > elementToProfit[b] / b->w();
}

而数组只是一个普通数组。

for (auto &knapsack : knapsacks)
{       
    std::sort(knapsack.second.begin(), knapsack.second.end(), compareItems);
}

我不太确定发生了什么。 VS 也在提示

'void std::sort(_RanIt,_RanIt)': expects 2 arguments - 3 provided

我猜这是因为比较器有问题?这应该非常简单...非常感谢任何帮助,谢谢!

最佳答案

比较函数不能是类的非静态成员,因为它不是在类的实例上调用的。它可以是静态类函数、独立函数或 functor。 .

从对问题的评论来看,您可能会发现仿函数是最好的前进方式。仿函数只是一个实现 operator() 的类,因此您可以通过函数调用语法使用它的对象。这种方法的好处是该对象可以包含您需要携带以进行比较的其他成员。

typedef std::unordered_map<ElementType*, double> ProfitType;

class functorClass
{
    ProfitType & elementToProfit;

public:
    functorClass(ProfitType & pt) : elementToProfit(pt) {}

    bool operator()(ElementType *a, ElementType *b)
    {       
        return elementToProfit[a] / a->w() > elementToProfit[b] / b->w();
    }
};

functorClass functor(elementToProfit);
for (auto &knapsack : knapsacks)
{       
    std::sort(knapsack.second.begin(), knapsack.second.end(), functor);
}

关于c++指针比较器未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32976629/

相关文章:

php - 如何显示自定义字段值数组中的 Wordpress 帖子

arrays - 根据参数从函数内部的数组返回值

angularjs - 错误 405(方法不允许)

c++ - printf 中的 %n 是什么以及如何使用它?

c++ - 调试版本找不到调试运行时 DLL

c++ - 单例模式性能问题

git - 取消忽略特定的 bin 目录

c++ - vector 大小在构造函数外恢复为 0

javascript - 什么时候用对象,什么时候用数组

c# - 在跟踪索引 C# 的同时快速排序数据数组