-2

220000 * 7 * 6 の多次元ベクトルを注文する最速の方法を探しています。

[x][5][y] で注文していますが、中央の (7) ベクトルのすべての値を追跡する必要があります。

for(int i =0;i<211876;i++){
    for(int k =0;k<211876;k++){
        if(vec[k][5][myposition] < vec[k+1][5][myposition]){
            for(int n =0;n<7;n++){
            swap2int(vec[k][n][myposition],vec[k+1][n][myposition]);}
        }
    }
}

void swap2int(int &one, int& two){
    int temp=0;
    temp = one;
    one = two;
    two = temp;

    return;
}

これはやや遅いので、速度を改善する方法を探しています。

4

2 に答える 2

4

よほどの理由std::sortがない限り、常に使用してください。必要に応じて独自のソート基準を提供できるため、使用しない理由はほとんどありません。あなたの場合、ストライド イテレータを提供する必要があるかもしれませんが、それらは簡単です。std::sort

于 2013-05-28T20:03:43.553 に答える
0

それらを常に最小ヒープ内に配置できます (ベクトルから最小 (または最大) ヒープを作成するには平均で O(n) かかります)、O(log n ) 各 top()+pop() 操作のコスト。そうすれば、素晴らしい O(N log N) のコストが得られ、ヒープで遊ぶことができます。ヒープは常に興味深いものであり、より楽しくなる可能性があります (また、ここに再度投稿するバグを追加する必要があります)。ちょうど std::sort :P を使用しました

または、前に述べたように std::sort を使用して、他のすべてを忘れることもできます;)

ところで: swap2int() 関数では、使用しない場合は temp に 0 を割り当てて時間を無駄にする必要はありません。次のように変更するだけです。

中間温度; 一時=1;

または直接:

int temp=1;

于 2013-05-28T23:32:18.893 に答える