Так что я был в этом режиме некоторое время, и получил некоторую помощь, выясняя, как это сделать здесь, и подумал, что мог бы попросить немного больше помощи. Я так много разобрался.
map<int,unsigned> frequencyCount;
//This is my attempt to increment the values of the map everytime one of the same numebers
for(size_t i = 0; i < v.size(); ++i)
frequencyCount[v[i]]++;
unsigned currentMax = 0;
unsigned checked = 0;
unsigned mode = 0;
for(auto it = frequencyCount.cbegin();
it != frequencyCount.cend(); ++it )
if (it ->second > currentMax)
{
mode = it->first;
currentMax = it->second;
}
if (currentMax == 1)
{
cout << "There is no mode in the vector" << endl;
}
else {
cout << " The mode of the vector is: " << mode << endl;
}
}
Таким образом, он вернет наиболее часто встречающееся int внутри вектора и вернет, что нет режима, если ни одно из значений карты не превышает 1. Теперь я пытался выяснить, что делать в случае более чем один режим, напр. 1 2 3 3 4 4 5 в настоящее время возвращает 3. Я хотел бы повторить 3 и 4.
Логически я бы сказал, что оператор if, проверяющий переменную, которая встречается наиболее часто по второму наиболее частому, будет работать. Конечно, есть возможность 400 режимов, если данные теста достаточно велики. Поэтому мне нужно создать цикл проверки и выхода, когда текущая переменная больше не равна той, которая встречается на единицу реже, чем она. Я просто не знаю, как это сделать. Любой совет, с чего начать?