[英]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向量進行排序。
這里以對兩個向量( 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> >
並對其進行排序。
這個想法很簡單:實現排序算法(例如,快速排序很簡單,對於大多數用例來說都可以-可以使用很多實現: http : //www.java-samples.com/showtutorial.php? tutorialid=445) 。
sort方法必須將兩個向量都作為輸入,但這應該是一個小問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.