gpt4 book ai didi

c++ - 处理函数对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:46 24 4
gpt4 key购买 nike

std::sort是在 Compare 类上参数化的模板。该函数本身将该类的一个对象作为参数,并“调用”它来比较待排序容器的元素。

我认为重要的是我们可以给 sort 一个具体的对象,而不是简单地让 sort 构造一个 Compare 对象本身。 (如果不对,请指正。)

现在假设我们要实现一个函数foovector<T> 作为输入和 T 的比较函数:

template <class T, class Compare>
bool foo(const vector<T>& v, Compare comp);

作为此实现的一部分,我们希望对包含 T 对的不同 vector 进行排序并且,比如说,int ,即排序 vector<pair<T, int>> .但是我们想根据 T 对这个 vector 进行排序仅组件。这意味着我们要在 T 上取消给定订单在 pair<T, int> 上下订单并将那个传递给std::sort .

如果不使用 lambda,如何做到这一点?我的问题是我看不到解除 Compare 的方法对象 T到一个 pair<T, int> .我只能举起 Compare class 然后构造一个对象,这意味着 foo会完全忽略它的 comp争论。

谢谢。

最佳答案

你可以在函数内部定义一个局部结构吗?

template <class T, class Compare>

bool foo(const vector<T>& v, Compare comp)
{
struct NewCompare
{
const Compare &rc;
NewCompare( const Conpare &comp ) : rc( comp ) {}
NewCompare( const NewCompare &comp ) : rc( comp.tc ) {}
bool operator ()( const std::pair<T, int> &p1, const std::pair<T, int> &p2 ) const
{
return rc( p1.first, p2.first );
}
};

//...
}

或者您可以编写一个通用的功能适配器。

关于c++ - 处理函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676385/

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