gpt4 book ai didi

c++ - 如何按一种度量对元素进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:06:40 25 4
gpt4 key购买 nike

在 C++ 中,我不太了解如何通过定义自定义函数对元素进行排序。

Cppreference.com 说对于比较函数:

comp - comparison function which returns ​​true​ if the first argument is less than the second.

​bool cmp(const Type1 &a, const Type2 &b);​

自然而然地,我会认为为了对元素进行排序,我需要定义一个度量,并且排序函数会根据度量对它们进行排序。

在我的实际示例中,我想根据图像文件与相机的距离对它们进行排序。我有一个链接到图像序列目录的 boost::filesystem::path vector

vector<boost::filesystem::path> path_vec

我自然而然地认为我需要编写这样的函数

double z_distance( boost::filesystem::path filename, integer time )

什么会为所有元素返回一个 double 值,并为每一帧按升序或降序对它们进行排序(因此参数中的变化时间)。

你能告诉我如何将这个返回单个值的函数转换为排序函数所需的 bool 函数吗?

如果我只能传递函数名称,而不是对函数的完整调用,我该如何传递参数

最佳答案

当你定义

 bool nearer(const boost::filesystem::path& a, const boost::filesystem::path& b)
{
int somevalue = 0;
return z_distance(a, somevalue) < z_distance(b, somevalue);
}

你可以做到

 std::sort(path_vec.begin(), path_vec.end(), nearer);

但是,我不知道如何处理函数 z_distance() 的第二个参数。也许你可以从你的文件中获取它,或者你必须使用仿函数而不是函数来比较。对于仿函数,请参阅@templatetypedef 给出的答案。

由于您标记了 VC++10,您还可以使用 C++0x 功能:编写一个 lambda 表达式(一个临时函数)来传递参数:

 int somevalue = 0;
std::sort(path_vec.begin(), path_vec.end(),
[=](const boost::filesystem::path& a, const boost::filesystem::path& b) -> bool
{
return z_distance(a, somevalue) < z_distance(b, somevalue);
}
);

关于c++ - 如何按一种度量对元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793863/

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