2016-07-10 2 views
-1

Ну Привет ребятаСлишком много элементов вектора. Комбинации программы

Я делаю проект по статистике лото и в основном это имеет класс «kombinacije4», который имеет атрибуты, как первый NUM второго пит третьего пит четвёртой Num дата и время, когда он последний раз появился и сколько раз появилась комбинация.

class kombinacije4 { 
public: 
    Date date; 
    Time time; 
    int first; 
    int second; 
    int third; 
    int fourth; 

    int howMuchRoundsDidntShowedUp; 
    int howMuchTimesAppeared; 
    void GetCombination(int, int, int, int); 
    void GetCombinationsAfterRound(int); 
}; 

Тогда я вектор этих элементов

std::vector<kombinacije4> fourties; 

инициализирует этот вектор довольно быстро и хорошо, но у меня есть проблема, когда я хочу, чтобы изменить эти атрибуты, как, когда он в последний раз появился дата и время или сколько он появился, потому что есть 80 номеров, и за один раунд они набирают 20 чисел. Из этих 20 чисел я должен сделать комбинации из 4 и найти их в fourties и изменить их атрибуты. В течение семисот раз. Потому что 700 раундов. У кого-нибудь есть идея, как я могу напрямую получить доступ к их значениям. Может быть std::find может что-то сделать? Очевидно, у меня есть проблема с временными ограничениями.

Любая идея делать эту программу с другой стороны?

for(auto i=round.begin();i!=round.end();i++){ 
     for(auto j=i+1;j!=round.end();j++){ 
      for(auto k=j+1;k!=round.end();k++){ 
       for(auto l=k+1;l!=round.end();l++){ 
        for(auto p=fourties.begin();p!=fourties.end();p++){ 
         -if-statement 
        } 
       } 
      } 
     } 
    } 
    Obviously this block is going to pass 3 million times through the vector of million and half elements 

СПАСИБО!

+0

Несколько замечаний: 1) Что означает 'если-statement' делать? Если он не изменит размер раунда, то вместо 4 вложенных циклов «i, j, k, l' вы можете предварительно вычислить количество раз« if-statement »будет выполняться (это будет зависеть от round.size()) и имеют только один цикл. 2) Вриемэ не английское слово. Не смешивайте два языка при отправке вопросов на переполнение стека. – mercury0114

+0

if-statement означает, что если в раунде есть комбинация, которая будет нарисована, он будет искать эту комбинацию через весь вектор из 1 580 512 комбинаций и ЕСЛИ НАЙДЕН (если оператор) изменит 'howMuchRoundsDidntShowedUp' и' howMuchTimesAppeared' в конечном итоге дату и время. Я просто забыл изменить это слово, но это всего лишь одно слово. С наилучшими пожеланиями –

+0

Я не знаю точно, но я подозреваю, что 'for_each_combination' из этой библиотеки было бы полезно: https://github.com/HowardHinnant/combinations –

ответ

0

Чтобы получить доступ к элементам объекта внутри вектора, вы должны просто использовать myobject[iterator].membername.

Например:

for (auto p = fourties.begin(); p!= fourties.end(); p++) 
{ 
    if (fourties.at[p].first == "your data" && 
     fourties.at[p].second == "your data" && 
     fourties.at[p].third == "your data" && 
     fourties.at[p].fourth == "your data") 
    { 
     fourties.at[p].date = 'your data'; 
     fourties.at[p].time = 'your data'; 
    } 
} 
+0

Вы не поняли. Мне нужно что-то быстрее для прохождения через вектор. Может быть, другой тип данных контейнера или что-то еще? –

+0

Вы можете добавить инструкцию if в каждой из циклов цикла в вашей программе, проверить наличие этого числа в 'fourties' и только продолжить, если проверка положительная. Вы бы обменяли четыре проверки на несколько циклов во внутренней структуре примерно на 80% обстоятельств – maja

Смежные вопросы