我有一个包含4个未排序元素的向量,向量看起来像这样:
vector<positionInfo> objects
其中positionInfo是一个结构:
struct positionInfo
{
int X_pos;
int Y_pos;
}
现在,这4个元素没有排序,但我希望它们按特定顺序排列,即:
这只是为了轻松访问构成立方体的4个点中的任何一个,使用很多变量可能会得到我想要的但是我认为这不是最优的,是否有我可以用来减小尺寸的算法代码并提高速度?
答案 0 :(得分:2)
如果您完全确定自己有解决方案,则可以部分使用std::sort
。
例如(3个步骤):
重载<
运算符:
bool
operator < (const positionInfo & left, const positionInfo & right)
{
return left.X + left.Y < right.X + right.Y;
}
接下来,对你的矢量进行排序:
std::sort( &objects[0], &objects[4] );
注意,在这个例子中,vector有4个元素。
因此,您将获得一个向量,其中第一个和最后一个元素根据您的意愿进行排序。
最后一步 - 如果需要,交换内部元素:
if ( objects[1].X < objects[2].X )
std::swap( &objects[1], &objects[2] );
完成。
答案 1 :(得分:0)
您的条件不是本地数据。如果一个元素比另一个元素更大或更小,您应该有关于要计算的所有元素的信息。
我用图片来说明这一点:
仅考虑(1)和(2)或(3)和(4),不可能说,什么应该更大:
如果(1)和(2)的 y 坐标大于(3)和(4),他们会交换他们的位置。
然而,通常的搜索算法只能在假设中使用,您可以比较本地元素,因此您可以选择两个元素中的哪一个更大,仅考虑2个元素。
因此您无法使用标准排序算法。
相反,你应该制作新的矢量并根据条件用元素填充它:
new_objects[0] = find_elememt_with_lowet_x_and_y(objects);
new_objects[1] = find_element_with_highets_x_and_lowest_y(objects);
//....
objects = new_objects;
答案 2 :(得分:0)
有几点:
Element 1 ( [0] ) must have the lowest Y and X pos
例如,它不需要具有最低y
和x
在同一点上。但是,如果您的意思是方形,而不是立方体,并且确实想要处理这种情况,您可以通过以下方式进行操作
x
和y
s