gpt4 book ai didi

c++ - std::bind 不适用于 std::sort

转载 作者:行者123 更新时间:2023-11-30 05:17:07 25 4
gpt4 key购买 nike

为什么只有当第二个参数大于 3 时它才有效。我该如何修复它?如果我对 copy_if 做同样的事情,它就可以了!任务:检查仿函数 std::bind 的效果。尝试使用它来形成标准仿函数 std::greater (module) 的条件。

#include <set>
#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <iterator>
#include <string>
#include <functional>
using namespace std;

template<typename T>
static void PrintVector(const std::vector<T> &v)
{
for (auto iterator = v.begin(); iterator != v.end(); ++iterator)
{
std::cout << *iterator << " ";
}
std::cout << std::endl;
}

int main()
{
std::cout << "Task_3: greater with std::bind\n";
ostream_iterator<int> out_it(cout, " ");
vector<int> v = { 1, 8, 7, 4, 3, 6, 2, 5 };
PrintVector(v);
auto greater_binded = bind(greater<int>(), placeholders::_1, 3);
sort(v.begin(), v.end(), greater_binded);
PrintVector(v);
return 0;
}

最佳答案

documentation 中所述对于 std::copy_if它期望一元谓词 ie 带有一个参数的函数,在另一侧 std::sort需要比较功能,必须满足Compare的要求概念。所以完全不清楚为什么您期望使用相同的功能 std::copy_ifstd::sort 一起工作.

And how can I fix it?

只要通过std::greater<int>不将第二个参数绑定(bind)到常量。如果确实需要使用 std::bind你可以只传递两个参数:

auto greater_binded = bind(greater<int>(), placeholders::_1, placeholders::_2);

但这与传递 greater<int>() 具有相同的效果直接。

关于c++ - std::bind 不适用于 std::sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42278033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com