Почему вам нужно определять свой собственный тип точки? В PCL уже есть pcl::PointXYZ
. И cloud->points
на самом деле является std::vector
из pcl::PointXYZ
.
Итак, вы ищете:
struct classcomp
{
bool operator() (const pcl::PointXYZ& a, const pcl::PointXYZ& b) const
{
return a.x < b.x;
}
};
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
cloud->points = { {1.01, 55.456, 10.136}, {3.416, 33.231 , 15.121}, {2.564, 44.12491, 96.123}, {5.123, 11.123, 62.176}, {4.135, 22.456, 56.141} };
std::priority_queue<pcl::PointXYZ, vector<pcl::PointXYZ>, classcomp> priQue;
for (unsigned int i = 0; i < cloud->size(); ++i)
priQue.push(cloud->points[i]);
// Or:
// for (const auto& p: cloud->points)
// priQue.push(p);
while (!priQue.empty())
{
const pcl::PointXYZ& point = priQue.top();
cout << "x:" << point.x << ", " << "y:" << point.y << ", z:" << point.z << endl;
priQue.pop();
}
Что дает нам следующий результат:
x:5.123, y:11.123, z:62.176
x:4.135, y:22.456, z:56.141
x:3.416, y:33.231, z:15.121
x:2.564, y:44.1249, z:96.123
x:1.01, y:55.456, z:10.136