sort(weapons.begin(), weapons.end(), cmp);报错函数中的参数调用太多
时间: 2024-02-19 14:58:15 浏览: 70
如果你使用的是旧版本的C++(如C++98),则sort函数的第三个参数应该是一个函数指针,而不是一个函数对象。在这种情况下,你可以使用以下两种方式来解决问题:
方法一:将比较函数改为普通函数而不是函数对象,然后将其传递给`sort`函数。
```c++
bool cmp(const weapon* w1, const weapon* w2) {
return w1->id < w2->id;
}
std::sort(weapons.begin(), weapons.end(), cmp);
```
方法二:使用C++98中的函数适配器`std::ptr_fun`将比较函数转换为函数指针。
```c++
bool cmp(const weapon* w1, const weapon* w2) {
return w1->id < w2->id;
}
std::sort(weapons.begin(), weapons.end(), std::ptr_fun(cmp));
```
如果你使用的是支持C++11或以上版本的编译器,则可以直接使用函数对象作为`sort`函数的第三个参数,例如:
```c++
struct cmp {
bool operator()(const weapon* w1, const weapon* w2) {
return w1->id < w2->id;
}
};
std::sort(weapons.begin(), weapons.end(), cmp());
```
或者使用lambda表达式:
```c++
std::sort(weapons.begin(), weapons.end(), [](const weapon* w1, const weapon* w2) {
return w1->id < w2->id;
});
```
阅读全文