c++指针比较器未编译
c++ pointer comparer not compiling
我想对指针数组进行排序,但是VS不会编译,说
'testClass::compareItems':非标准语法;使用'&'创建指向成员
的指针
比较器是这样的:
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)':期望2个参数-提供3个
我猜是因为比较器有问题?这应该非常简单……任何帮助是非常感激的,谢谢!
比较函数不能是类的非静态成员,因为它不是在类的实例上调用的。它可以是静态类函数、独立函数或函子。
根据对问题的评论判断,你可能会发现一个函子是最好的方法。一个函子只是一个实现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);
}
成员函数有一个额外的参数(实例的this
指针),因此你的签名不匹配- std::sort
需要在没有对象引用的情况下调用函数。
文档还指出它应该满足二进制谓词的要求。
这是一个复制器样本
struct ElementType {
int w() {
return 2;
}
};
class testClass {
public:
bool compareItems(ElementType *a, ElementType *b)
{
return a->w() < b->w();
}
void sort() {
vector<ElementType*> vecOfPointers;
std::sort(vecOfPointers.begin(), vecOfPointers.end(), compareItems);
}
vector<ElementType*> elementToProfit;
};
您可以通过创建比较函数static
(示例)来修复您的代码。
我发现了两个步骤:(假设knapsack.second
是矢量)
- 定义为
bool opeator()(...){...}
; -
sort(knapsack.second.begin(), knapsack.second.end(),*this)
.
相关文章:
- std::设置自定义比较器
- C++中"std::sort"比较器的不同类型
- 将 std::set 与基于键的比较器一起使用
- 带自定义比较器的最小优先级队列
- 函数类作为比较器
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- set_intersection使用自定义设置比较器
- 如何为集合 c++ 建立比较器
- C++复杂情况的比较器通过参数问题
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 对没有比较器或λ函数的向量进行排序?
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 用户定义的结构是否有默认C++比较器?
- C++设置了一个用于排序的比较器和另一个用于唯一性的比较器
- 使用迭代器的自定义比较器函数
- C++使用make_heap和配对比较器编译错误
- c++指针比较器未编译
- 为什么使用自定义比较器的std::sort不能编译?