2012-02-08 31 views
2

私はxvaluesとyvaluesという2つのベクトルの2つのベクトルを取り込む関数をC++で作成しています。私の目的は、これらの入力を使って補間を作成することです。しかし、x値が昇順になり、y値が正しいx値に対応するように、(x、y)のペアがソートされていると便利です。C++で別のベクトルと並べ替えてベクトルを並べ替える

これを効率的に行う方法を知っている人はいますか?

+0

ペアのベクトルを1つだけ取得する方法はありますか。 (x、y)? – ezdazuzena

答えて

1

またはペアのベクトルを使用して、stl sort algorithmで簡単に並べ替えることも、独自の並べ替え方法を記述することもできます。したがって、あなたはseveral optionsです。 独自のソートアルゴリズムでは、xベクトルだけでなくyベクトルもソートすることができます。

ここでは、2つのベクトル(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; 
     } 
    } 
} 

しかし、再び、あなたはdefenitely std::vector< std::pair<double, double> >を使用する必要がありますし、それを並べ替えます。

+0

私のペアの最初の要素に基づいてペアのベクトルをソートするには、std :: sortを使うことができますか? – Derek

+1

@Derek:うん、ここのように:http://stackoverflow.com/a/5751333/1141095 – ezdazuzena

3

私はおそらくペアのベクトルを作成し、必要な手段でソートします。

データ抽象化(実際にリンクされている値の2つの別々のコレクションは間違っています)のようです。

+0

私の入力は2つの別々のベクトルでなければなりません。私のC++プログラムは2つのベクトルとしてExcelからの入力値を取ります。これらの2つのベクトルが与えられたら、私はちょうどペアのベクトルを作成する必要がありますか?どのようにして、ペアのベクトルをペアの最初の要素の昇順に並べ替えるのですか? – Derek

+1

それが間違っているかどうかは、彼のデザインの実際の目標に依存します。もし彼が記憶を救い、このようにすることができれば、それは正しいデザインです。 – PlasmaHH

+0

@PlasmaHH:前回私がチェックした(STL、VC++ 2008)、std :: pairのサイズは(アライメントの問題を無視すると、タイプは両方ともdouble型なのでここで扱うことができます)、コンポーネント。したがって、ダブルスの2つのベクトルがどのようにして2倍のペアの1つのベクトルと比較してメモリを節約することができないのか分かりません... -/ – paercebal

2

代わりに、2つのイテレータを内部的に保持し、それらを同時に増減させる何らかのイテレータアダプタを記述することもできます。これらは、スワップ時に両方のベクトルの2つの値を入れ替える特別な型に逆参照しますが、比較する場合は比較するだけです。これはいくつかの仕事(余分なスワップ、オペラ<、クラス)かもしれませんが、テンプレートとして実行され、これをより頻繁に必要とする場合、支払うことができます。

1

ソートアルゴリズムを実装することは簡単です(例:quicksortは簡単ですが、ほとんどの使用例ではOKです)。多くの実装が利用可能です:http://www.java-samples.com/showtutorial.php?tutorialid=445)。

  • 両方のベクター上のスワップを行い、あなたのxベクトルと
  • に比較してください。

ソート方法は両方のベクトルを入力する必要がありますが、それは軽微な問題です。

関連する問題