根据持续时间C ++对连续元素进行排序

时间:2017-03-08 16:10:20

标签: c++ sorting

我正在编写一个代码,要求我执行以下操作, 给出两个向量:

arrival  : 0 0 1 8 9 10 20 20 30 40 41 42 42 43 44 
duration : 4 3 1 5 3 1  15 2  2  5  3  1  16 3  1

我正在尝试迭代向量,当我找到两个或更多连续元素时,我需要按照它们的持续时间按升序对它们进行排序。 所以输出应该如下:

arrival  : 0 0 1 8 9 10 20 20 30 40 41 42 42 43 44
duration : 3 4 1 5 3 1  2  15 2  5  3  1  16 3  1

如您所见,前两个0的持续时间已被交换。 然而,不知何故,它与到达时间42交换16与1

int p[pnum];
int temp;
for(int i=1;i<=pnum;i++){p[i] = i;}

for(int i=0;i<pnum;i++)
{
    for(int j=0;j<pnum;j++)
    {
        if(arrival[i]<arrival[j])
        {
            temp=p[j];
            p[j]=p[i];
            p[i]=temp;
            temp=arrival[j];
            arrival[j]=arrival[i];
            arrival[i]=temp;
            temp=duration[j];
            duration[j]=duration[i];
            duration[i]=temp;
        }
    }
}

如何解决此问题以获得正确的输出?请帮忙!

1 个答案:

答案 0 :(得分:1)

如果您将到达时间和持续时间设置为import numpy as np elements = np.array([[3, 2], [1, 4], [1, 3]]) def findConnectedNodes(lookup): connected = [x for y in elements for x in y if lookup in y] return list(set(connected) - {lookup,}) print(findConnectedNodes(3)) # [1, 2] 并将该对放入std::pair<int,int>,则会按预期对其进行排序。如果需要,您可以使用排序值生成2个新向量。

更清洁的是使用带有所需字段的结构,但是你应该定义一个比较函数来决定顺序。