1

質問のタイトルについてはわかりませんでしたが、ここに問題があります。

私は構造体の配列を持っています。今度はそれを参照によって関数に渡します。その中には、同じ構造体の優先キューがあります。

ここで、優先度キューを使用して配列を処理します。プロセスの最後に、構造体の 2 つの属性 (たとえばAB) が配列に変更されますが、変更の 1 つだけが必要です。 ( ) は関数の外側に反映され、配列を渡す前のように、 other( ) の変更を復元しAたいと考えています。B同じ配列を処理する必要があるが、パラメーターが異なる2回目は、Aの変更を残したいが、Bの変更を残したいので、私はそれをしなければなりません。

私が今行っていることは、プロセスの後、関数の外に出たら、配列全体を処理し、属性の値が変更された場所はいつでもB初期値に戻すことです。これは明らかに O(n2) 操作であり、私には適していません。

効率化するために何かできることはありますか?

私はCで働いています。

4

1 に答える 1

1

Bたとえば、タイプの場合、関数で配列をbool作成できます。bool構造体ではなく、優先度キューで入力配列のインデックス (整数) を使用します。配列を使用して、入力配列の sboolにアクセスします。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
    }
}
于 2013-04-14T12:45:58.580 に答える