在编写用于解决背包问题的算法时遇到了问题。我有一个3元素数组的向量(C ++ 11),我想通过let的说明这些数组的第一个元素来对矢量进行排序。
我尝试过使用预定义比较函数的std :: sort,但它甚至没有编译。
我想我的比较功能不能像我期望的那样工作:
bool compareByValue(const data &a, const data &b)
{
return a[0] < b[0];
}
int main()
{
vector<array<int, 3> > myVector;
...
sort ( myVector.begin(), myVector.end(), compareByValue );
}
这不是我第一次遇到类似的问题,我试图在网上找到解决方案,但没有任何令人满意的结果。
答案 0 :(得分:5)
另请注意std::array
有overloaded comparison operators,它按字典顺序比较数组。这意味着,如果你想根据第一个元素进行排序,你甚至不需要谓词。只需std::sort
你的矢量。
答案 1 :(得分:2)
我不知道您从哪里获得data
,但您需要将其更改为array<int, 3>
或将compareByValue
设为模板:
bool compareByValue(const array<int, 3> &a, const array<int, 3>&b)
{
return a[0] < b[0];
}