Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 找到最小值并按相同顺序将其分配给新变量-C++;_C++ - Fatal编程技术网

C++ 找到最小值并按相同顺序将其分配给新变量-C++;

C++ 找到最小值并按相同顺序将其分配给新变量-C++;,c++,C++,我有一个向量,有4个坐标点,浮点型。值从向量中读取并存储在4个不同的变量中。我想从四个点中找到最小的x坐标值,并将其指定为第一个变量。其余变量的顺序与原点相同 例如:p1到p4表示坐标点。 p1=(319.402213.309) p2=(184.437312.164) p3=(54.9806183.36) p4=(187.458,95.2848) 最小x坐标为54.9806。在找到最小值后,我想以新的顺序为新变量分配坐标值。 p1_新=(54.9806183.36) p2_new=(187.45

我有一个向量,有4个坐标点,浮点型。值从向量中读取并存储在4个不同的变量中。我想从四个点中找到最小的x坐标值,并将其指定为第一个变量。其余变量的顺序与原点相同
例如:p1到p4表示坐标点。
p1=(319.402213.309)
p2=(184.437312.164)
p3=(54.9806183.36)
p4=(187.458,95.2848)
最小x坐标为54.9806。在找到最小值后,我想以新的顺序为新变量分配坐标值。
p1_新=(54.9806183.36)
p2_new=(187.458,95.2848)-以前是p4
p3_new=(319.402213.309)-以前是p1
p4_new=(184.437312.164)-以前是p2
每个迭代的最小值可能不同。

感谢您的帮助。

让我们将问题分成几个部分: a) 求最小的x值 b) 一旦建立,就可以得到向量中的位置,以模向量的大小运行

代码:(不要过分强调正确的风格)

vector vec={319.402213.309}、{184.437312.164}、{54.9806183.36}、{187.458,95.2848}
,vec2;
double minX=vec[0]。第一个;
int minIndx=0;
对于(int i=1;i你能不能简单地使用排序算法,比如冒泡排序、快速排序等等。。临时创建一个向量来交换值。但是@AbhishekPanjabi,排序算法按升序或降序对值进行排序。我不想把它们分类。请看我的例子。你可以通过制作一个由4个向量组成的数组来更好地做到这一点。然后您只需找到min并将其索引保存在变量中,然后简单地将其与数组中的第0个索引向量交换。同样,您必须创建一个向量变量来交换值。但是您交换了几次。输出的模式是什么?为什么要交换p2和p4?@AbhishekPanjabi我不想把最小值移到第一个位置。找到最小x坐标值后,必须将其指定为第一个坐标。这些变量后面是按相同顺序排列的剩余变量,类似于cyclic。请注意,您可以使用如下内容:autoy=min_元素(vec.begin(),vec.end());auto minIndx=vec.end()-y;循环将保持不变,非常感谢。在3种情况下工作正常,但在最后一种情况下(最后一个向量集为最小值),给出了“调试断言错误”。例如:向量vec={119.402213.309}、{84.437、312.164}、{154.9806、183.36}、{18.458、95.2848}、vec2;你能告诉我是什么原因吗?谢谢你的提示。这是非常有用的。是的,我写的东西中有一个小错误,当它是最后一个元素时,我相信你应该能够自己修复它,作为程序员,必须理解并尝试这些东西。那有什么问题?循环的问题在于,正确的循环是:对于(inti=(minIndx+1)%static_cast(vec.size());ivector<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";