посчитай статистику функцией
Код:
map<string,pair<int,unsigned> > __calc_stats;
bool _stats(const char* expr, bool result)
{
static const int step_by_result[2] = {-1,1};
pair<int,unsigned>& stat(__calc_stats[expr]);
stat.first += step_by_result[result]; // баланс да/нет
++stat.second; // сколько раз посчиталось
return result;
}
_stat("p1==ap1[i] && p6==ap6[i]", p1==ap1[i] && p6==ap6[i]) && ...
программа отработает гораздо дольше, будешь знать, какие условия на твоих данных встречаются чаще,
чтобы переупорядочить их.