g ++を使用すると3秒実行される次のコードがあり、Microsoftコンパイラでは30秒以上実行され、理解できません...
struct constraint{
int bitline;
int result;
};
// this vector is filled with about 1 milion items
vector<constraint> constraints;
for (int a = 0; a < constraints.size(); ++a)
{
if (a% 100 == 0) cout << a << " "<<endl;
for (int b = a; b < constraints.size(); ++b)
{
int anded = constraints[a].bitline & constraints[b].bitline;
int ored = constraints[a].bitline | constraints[b].bitline;
// a subset of b
if (anded == constraints[a].bitline && constraints[a].result >= constraints[b].result )
{
// delete a
constraints[a].bitline = 0;
}
if (anded == constraints[b].bitline && constraints[b].result >= constraints[a].result )
{
constraints[b].bitline = 0;
}
}
}
編集: 最適化フラグは使用しません。Windows XP 32 ビットで実行します...「debug cout line」なしで試してみましたが、大きな変化はありませんでした。