我正在用C ++编写一个函数,它将接收2个称为xvalues和yvalues的双精度向量。我的目标是使用这些输入创建插值。但是,如果对(x,y)对进行排序以使x值按递增顺序并且y值仍然对应于正确的x值,那将非常方便。
有谁知道如何有效地做到这一点?
答案 0 :(得分:3)
我可能会创建一个对的向量,并通过任何必要的方式对其进行排序。
这听起来像是你的数据抽象(实际上“链接”的值的2个独立集合是错误的)。
答案 1 :(得分:2)
作为替代方案,您可以编写某种迭代器适配器,在内部保存两个迭代器并同时增加/减少/分配它们。它们取消引用特殊类型,在交换时,交换两个向量中的两个值,但在比较时只比较一个。这可能是一些工作(额外的交换,操作<,类),但是当作为模板完成时,你需要更频繁,可以支付。
答案 2 :(得分:1)
或者您使用对向量,然后可以使用stl sort algorithm轻松排序,或者编写自己的排序方法。因此你several options。 在您自己的排序算法中,您不仅可以分别对x向量进行排序,还可以对y向量进行排序。
此处为您的两个向量(vec1
和vec2
)使用冒泡排序的示例。
bool bDone = false;
while (!done) {
done = true;
for(unsigned int i=0; i<=vec1.size()-1; ++i) {
if ( vec1.at(i) > vec1.at(i+1) ) {
double tmp = vec1.at(i);
vec1.at(i) = vec1.at(i+1);
vec1.at(i+1) = tmp;
tmp = vec2.at(i);
vec2.at(i) = vec2.at(i+1);
vec2.at(i+1) = tmp;
done = false;
}
}
}
但是,正如其他人在此指出的那样,你应该明确地使用std::vector< std::pair<double, double> >
并对其进行排序。
答案 3 :(得分:1)
这个想法很简单:实现排序算法(例如,快速排序很简单,对于大多数用例来说都很简单 - 有很多可用的实现:http://www.java-samples.com/showtutorial.php?tutorialid=445)。
sort方法必须将两个向量作为输入,但这应该是一个小问题。