gpt4 book ai didi

c++ - 如何使用 Boost(Lambda?)使 std::sort() 更容易?

转载 作者:太空狗 更新时间:2023-10-29 19:59:45 27 4
gpt4 key购买 nike

假设我有

struct Value { int foo(); };
size_t *begin = ...,
      *end   = ...;

如果我想在 C++03 中对一堆 Value 索引进行排序,我必须像这样编写一些乏味的东西:

struct Comparator
{
Value *data;
Comparator(Value *data) : data(data) { }
bool operator()(size_t a, size_t b)
{ return data[a].foo() < data[b].foo(); }
};
sort(begin, end, Comparator(data));

有没有什么方法可以使用 Boost(可能使用 Boost.Lambda)更整洁地编写它,最好是在 1 行中?

最佳答案

没有。

Boost.Lambda 在处理重载运算符时效果最好。一旦将命名函数调用带入事物中,Boost.Lambda 在使代码更简洁和易于阅读方面就变得不那么有用了。您必须开始使用函数绑定(bind)器和其他类似的东西。

事实上,您使用 lambda 参数作为索引(而不是被索引的值)可能会把事情搞砸,就像在 Boost.Lambda 库中使用 operator[] 一样。

可以制作一个与此等效的 Boost.Lambda。但这不会是任何我称之为“整洁”的东西,而且“1 行”会非常长。

C++11 将 lambda 引入语言而不是将 Boost.Lambda 合并到标准库中是有原因的。

哦,别忘了:Boost.Lambda 通常被认为已过时。请改用 Boost.Phoenix。诚然,它不会比 Lambda 对您有更多帮助。

关于c++ - 如何使用 Boost(Lambda?)使 std::sort() 更容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11589681/

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