我不确定,关于问题的标题,但问题就在这里。
我有一个结构数组,现在我通过引用函数传递它,其中我有一个相同结构的优先级队列。
现在,我通过使用优先级队列处理我的数组,并且在流程结束时,我将拥有我的结构中的两个属性(比如A
和B
) ,在数组中更改,而我只希望其中一个更改(A
)反映在函数外部,我希望另一个(B
)更改恢复,通过之前的方式数组。我必须这样做,因为第二次当我必须处理相同的数组,但使用不同的参数时,我希望A的更改保留,但B不能。
我现在所做的是,在这个过程之后,一旦我不在函数中,我处理整个数组,并且我在哪里为属性B
更改了值我将其恢复为初始值。现在这显然是一个对我不利的O(n2)操作。
我能做些什么来提高效率。
我正在与C合作。
答案 0 :(得分:1)
例如,如果B
的类型为bool
,则可以在函数中创建bool
数组。使用优先级队列中的输入数组(整数)的索引而不是结构。使用bool
数组访问输入数组的B
:
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
}
}