1

我不确定问题的标题,但这就是问题所在。

我有一个结构数组,现在我通过引用一个函数来传递它,其中我有一个相同结构的优先级队列。

现在,我通过使用优先级队列来处理我的数组,并且在处理结束时,我将在数组中更改我的结构的两个属性(比如AB),而我只想要一个更改( A) 反映在函数外部,并且我希望将 other( B) 更改恢复为传递数组之前的方式。我必须这样做,因为当我第二次必须处理相同的数组但使用不同的参数时,我希望 A 的变化保持不变,但 B 不保持不变。

我现在要做的是,在处理之后,一旦我退出函数,我会处理整个数组,并且无论何时我更改了属性的值,B我都会将其恢复为初始值。现在这显然是一个对我没有好处的 O(n2) 操作。

我可以做些什么来提高效率吗?

我正在和 C 一起工作。

4

1 回答 1

1

例如,如果您B是类型,则可以在函数中创建一个数组。在优先级队列中使用输入数组(整数)的索引而不是结构。使用数组访问输入数组的 s:boolboolboolB

void func(Type *Input, size_t n) 
{
    bool B[n];
    queue<size_t> pqueue;
    for (size_t i = 0; i < n; i++)
       B[i] = Input[i].B;
    size_t index;
    while (index = pqueue.front()) {
       // do something with Input[index]
       // B[index] = false;
       // rest of the function
    }
}
于 2013-04-14T12:45:58.580 回答