簡體   English   中英

在C ++中對一個向量與另一個向量進行排序

[英]Sorting a vector alongside another vector in C++

我正在用C ++寫一個函數,它將接受兩個稱為xvalues和yvalues的雙精度向量。 我的目標是使用這些輸入創建插值。 但是,如果對(x,y)對進行排序,以使x值按升序排列並且y值仍與正確的x值相對應,那將真的很方便。

有誰知道我如何有效地做到這一點?

我可能會創建一個成對的向量,並通過必要的方式對其進行排序。

聽起來像是您的數據抽象(實際上“鏈接”的值的2個單獨的集合是錯誤的)。

作為替代方案,您可以編寫某種迭代器適配器,該適配器在內部容納兩個迭代器,並同時增加/減少/分配它們。 它們取消引用特殊類型,該特殊類型在交換時交換兩個向量中的兩個值,但在比較時僅比較一個。 這可能是一些工作(額外的swap,op <,class),但是當作為模板完成時,如果您需要更多的時間,則可能會得到回報。

或者使用成對的向量,然后可以使用stl sort算法輕松對其進行排序 ,或者編寫自己的sort方法。 因此,您有幾種選擇 然后,在您自己的排序算法中,您不僅可以對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> >並對其進行排序。

這個想法很簡單:實現排序算法(例如,快速排序很簡單,對於大多數用例來說都可以-可以使用很多實現: http : //www.java-samples.com/showtutorial.php? tutorialid=445) 。

  • 對您的x向量進行比較,然后
  • 在兩個向量上進行交換。

sort方法必須將兩個向量都作為輸入,但這應該是一個小問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM