找到最小值并将它以相同的顺序分配给新变量 - C ++

时间:2016-05-06 14:06:41

标签: 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
最小值可以从一次迭代到另一次迭代不同 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

让我们将问题分成几个部分: 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";