簡體   English   中英

查找最小值並將其按相同順序分配給新變量 - C++

[英]Find minimum value and assign it in same order to new variable - C++

我有一個向量,它有 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) - 以前是 p2
最小值可能因一次迭代而異。
感謝您的任何幫助。

讓我們把問題分成幾部分:a)找到最小的 x 值 b)一旦成立,你就得到了向量中的位置,以模向量的大小運行

代碼:(並沒有過分強調正確的風格)

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";

暫無
暫無

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

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