在C ++中将向量与另一个向量一起排序

时间:2012-02-08 09:22:55

标签: c++ sorting

我正在用C ++编写一个函数,它将接收2个称为xvalues和yvalues的双精度向量。我的目标是使用这些输入创建插值。但是,如果对(x,y)对进行排序以使x值按递增顺序并且y值仍然对应于正确的x值,那将非常方便。

有谁知道如何有效地做到这一点?

4 个答案:

答案 0 :(得分:3)

我可能会创建一个对的向量,并通过任何必要的方式对其进行排序。

这听起来像是你的数据抽象(实际上“链接”的值的2个独立集合是错误的)。

答案 1 :(得分:2)

作为替代方案,您可以编写某种迭代器适配器,在内部保存两个迭代器并同时增加/减少/分配它们。它们取消引用特殊类型,在交换时,交换两个向量中的两个值,但在比较时只比较一个。这可能是一些工作(额外的交换,操作<,类),但是当作为模板完成时,你需要更频繁,可以支付。

答案 2 :(得分:1)

或者您使用对向量,然后可以使用stl sort algorithm轻松排序,或者编写自己的排序方法。因此你several options。 在您自己的排序算法中,您不仅可以分别对x向量进行排序,还可以对y向量进行排序。

此处为您的两个向量(vec1vec2)使用冒泡排序的示例。

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)。

  • 对x-vector和
  • 进行比较
  • 对两个向量进行交换。

sort方法必须将两个向量作为输入,但这应该是一个小问题。