我正在编写一个代码,要求我执行以下操作, 给出两个向量:
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;
}
}
}
如何解决此问题以获得正确的输出?请帮忙!
答案 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个新向量。
更清洁的是使用带有所需字段的结构,但是你应该定义一个比较函数来决定顺序。