2016-05-06 9 views
-2

私は、4つの座標点、浮動小数点型を持つベクトルを持っています。値はベクトルから読み込まれ、4つの異なる変数に格納されます。私は、4つの点から最小のx座標値を見つけ出し、最初の変数として割り当てたいと思います。残りの変数は原点と同じ順序に従います。
たとえば、p1〜p4は座標点を表します。
P1 =(319.402,213.309)
P2 =(184.437,312.164)
P3 =(54.9806,183.36)
P4 =(187.458,95.2848)
最小x座標54.9806です。最小値を見つけた後、新しい値に新しい値に座標値を割り当てたいと思います。
p1_new =(54.9806,183.36)
p2_new =(187.458,95.2848)はP4
p3_new =(319.402,213.309)はP1
p4_new =(184.437,312.164)以前-was
P2以前-was以前-was最小値は、反復ごとに異なる場合があります。
ありがとうございました。最小値を見つけ、新しい変数に同じ順序で割り当てます - C++

+0

バブルソート、クイックソートなどのソートアルゴリズムを使用することができます。値を交換するために一時的にベクトルを作成します。 –

+0

しかし、@AbhishekPanjabiはソートアルゴリズムによって値を昇順または降順にソートします。私はそれらを並べ替えることを望んでいない。私の例を見てください。 – SNB

+0

これを行うには、4つのベクトルの配列を作る方が良いでしょう。次に、minを見つけて、その変数を変数に保持し、配列内の0番目のインデックスベクトルと単純に入れ替えます。再度、値を入れ替えるベクトル変数を作成する必要があります。 –

答えて

1

のは、セグメントに問題を分割してみましょう: a)最小x値 Bを見つける。)一度設立され、あなたがmoduluベクトルの大きさのベクトル実行で

コードの場所を得た:(とあまりないとし適切なスタイルに重点を置く)

vector<pair<double, double>> vec = { {319.402,213.309} ,{184.437,312.164 },{54.9806,183.36} ,{187.458,95.2848} } 
, vec2; 

double minX = vec[0].first; 
int minIndx = 0; 
for (int i = 1; i < static_cast<int>(vec.size()); i++) 
    if (vec[i].first < minX) 
    { 
     minIndx = i; //saves the index 
     minX = vec[i].first; //saves the minX value 
    } 

vec2.emplace_back(vec[minIndx]); //put it in the result vector (vec2) 


//emplace everything else to the result vector modulu vec.size() 
for (int i = minIndx + 1; i != minIndx; i = (i + 1) % static_cast<int>(vec.size())) 
    vec2.emplace_back(vec[i]); 

//prints the result 
for (const auto &v: vec2) 
    cout << "(" <<v.first << ", " <<v.second << ")\n"; 
+1

通知はのように使用できます:auto y = min_element(vec.begin()、vec.end()); auto minIndx = vec.end() - y;円形のループは同じままです – LiorA

+0

A、ありがとうございます。 3つのケースで完璧に動作しますが、最後のベクトルセットがminmumである最後のケースでは、 "Debug Assertion falied"と表示されます。例:ベクトル> vec = {{119.402,213.309}、{84.437,312.164}、{154.9806、183.36}、{18.458,95.2848}}、vec2;何が原因なのか教えていただけますか? – SNB

+0

チップをありがとうございます。非常に役に立ちます。 – SNB

関連する問題