gpt4 book ai didi

c++ - 使用 boost::bind 排序

转载 作者:行者123 更新时间:2023-11-30 01:00:57 24 4
gpt4 key购买 nike

bool pred(int k, int l, int num1, int num2)  
{
return (num1 < num2);
}

int main()
{
vector <int> nums;
for (int i=50; i > 0; --i)
{
nums.push_back(i);
}
std::sort (nums.begin(), nums.end(), boost::bind(&pred, 5, 45));
}

我是一个新手。我正在学习使用 boost::bind,我想对一个整数 vector 进行排序,并去除 vector 中大于 45 且小于 5 的所有元素。很难做到这一点。如果有人可以帮我做,那就太好了?

我遇到问题的原因是因为我试图在遍历 vector 以对其进行排序时摆脱 vector 元素。我知道如果我先对它进行排序然后从中删除元素会容易得多。但我想这样做。感谢您的帮助。

最佳答案

您不能通过 sort 执行此操作。

删除排序之前或之后的元素。

bool outOfRange(int low, int high, int num) {
return low > num || num > high;
}

...

nums.erase(
std::remove_if(nums.begin(), nums.end(),
boost::bind(&outOfRange, 5, 45, _1)),
nums.end()
);

虽然你真的根本不需要boost::bind。哎呀,我们也可以让它更通用一点:

template<typename T, class cmp = std::less<T> >
struct outOfRange : std::unary_function<T, bool> {
outOfRange(const T &low, const T &high) : low(low), high(high) {}
bool operator()(const T &val) { return cmp()(val, low) || cmp()(high, val); }
const T &low, &high;
}

...

nums.erase(
std::erase_if(nums.begin(), nums.end(), outOfRange<int>(5, 45)),
nums.end()
);

关于c++ - 使用 boost::bind 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1677211/

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