gpt4 book ai didi

c++ - 我的 boolinq .orderBy 有什么问题?

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

所以我尝试下一个可编译代码:

#include <math.h> 
#include <iostream>
#include <algorithm>
#include <vector>
#include "boolinq.h"

float dtSqrt(float x)
{
return sqrtf(x);
}

/// Returns the distance between two points.
/// @param[in] v1 A point. [(x, y, z)]
/// @param[in] v2 A point. [(x, y, z)]
/// @return The distance between the two points.
inline float dtVdist(const float* v1, const float* v2)
{
const float dx = v2[0] - v1[0];
const float dy = v2[1] - v1[1];
const float dz = v2[2] - v1[2];
return dtSqrt(dx*dx + dy*dy + dz*dz);
}

int main () {
float target[] = {1,2,3};

float floats1[] = {1.321f,2.123f,3.333f};
float floats2[] = {1.011f,2.234f,3.555f};
float floats3[] = {1.9f,2.9f,3.9f};
float floats4[] = {1,2,3};
float floats5[] = {1,2,3.123f};

std::vector<const float *> floatsVector;
floatsVector.push_back(floats1);
floatsVector.push_back(floats2);
floatsVector.push_back(floats3);
floatsVector.push_back(floats4);
floatsVector.push_back(floats5);

//stl way
//std::sort(floatsVector.begin(), floatsVector.end(), [&](const float* pointA, const float* pointB) -> bool{
// auto distA = dtVdist(pointA, target);
// auto distB = dtVdist(pointB, target);
// return distA < distB;
//});
// auto stl_point = floatsVector.front();

try {
auto point = boolinq::from( floatsVector )
.orderBy([&](const float* point) -> float{
auto dist = dtVdist(point, target);
return dist;
})
.reverse()
.toVector()
.front();

std::cout << point[0] << " " << point[1] << " " << point[2] << ";" << std::endl;

} catch (std::exception &e) {
std::cout << e.what() << std::endl;
}
std::cin.get();
return 0;
}

boolinq header该程序编译速度非常快。然而它在运行时uncachably!失败并出现一些内部 vector 断言错误:

enter image description here

问题是:

 boolinq::from( floatsVector )
.orderBy([&](const float* point) -> float{
auto dist = dtVdist(point, target);
return dist;
}).toVector();

是空 vector 。

取消注释 STL 代码使程序按预期工作!

进一步更简单的点重新排序使其按预期工作:

float floats1[] = {1,2,3};
float floats2[] = {1,2,3.123f};
float floats3[] = {1.321f,2.123f,3.333f};
float floats4[] = {1.011f,2.234f,3.555f};
float floats5[] = {1.9f,2.9f,3.9f};

一个非常奇怪的错误...

顺便说下下一段代码:

#include <math.h> 
#include <iostream>
#include <algorithm>
#include <vector>
#include "boolinq/boolinq.h"

struct Point {
float X;
float Y;
float Z;
Point() : X(0), Y(0), Z(0) {}
Point(float X, float Y, float Z) : X(X), Y(Y), Z(Z) {}
};

float dtSqrt(float x)
{
return sqrtf(x);
}

inline float dtVdist(const float* v1, const float* v2)
{
const float dx = v2[0] - v1[0];
const float dy = v2[1] - v1[1];
const float dz = v2[2] - v1[2];
return dtSqrt(dx*dx + dy*dy + dz*dz);
}

inline float dtVSqrDist(const Point & v1, const Point & v2)
{
const float dx = v2.X - v1.X;
const float dy = v2.Y - v1.Y;
const float dz = v2.Z - v1.Z;
return dx*dx + dy*dy + dz*dz;
}

int main () {
auto target = Point(1,2,3);
auto pointA = Point(1,-2,3);
auto pointB = Point(1,2,3);

std::vector<Point> pointsVector;
pointsVector.push_back(pointA);
pointsVector.push_back(pointB);

//stl way
std::sort(pointsVector.begin(), pointsVector.end(),
[&](const Point & pointA, const Point & pointB) -> bool{
auto distA = dtVSqrDist(pointA, target);
auto distB = dtVSqrDist(pointB, target);
return distA < distB;
});
std::reverse(pointsVector.begin(), pointsVector.end());
auto stl_point = pointsVector.front();

std::cout << "stl point: " << stl_point.X << " " << stl_point.Y << " " << stl_point.Z << ";" << std::endl;

//try {

auto points = boolinq::from( pointsVector )
.orderBy([&](const Point & point) -> float{
auto dist = dtVSqrDist(point, target);
return dist;
})
.reverse()
.toVector();

auto point = points.empty() ? Point() : points.front();

std::cout << "boolinq point: " << point.X << " " << point.Y << " " << point.Z << ";" << std::endl;

//} catch (std::exception &e) {
// std::cout << e.what() << std::endl;
//}
std::cin.get();
return 0;
}

产生:

stl point: 1 -2 3;
boolinq point: 0 0 0;

我的代码有什么问题?它看起来像在 main boolinq page 上提供的 orderBy 示例...?

最佳答案

显然 boolinq 不支持 .orderBy().reverse() - 这有点令人担忧,理所当然。如果您按负距离排序(没有反向),它会起作用。

在我看来,boolinq 还没有准备好正式使用。

关于c++ - 我的 boolinq .orderBy 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422449/

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