Итак, я некоторое время был в этом режиме и получил некоторую помощь, чтобы выяснить, как это сделать здесь, и подумал, что я могу попросить немного больше пожертвований. Я так много разобрался.Поиск нескольких режимов в векторе с использованием карт
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;
}
}
Так будет reutrn наиболее часто происходя Int внутри вектора, и вернуться, что нет режима, если ни одно из значений карты не превышает 1. Теперь я пытаюсь понять что в случае более чем одного режима, например. 1 2 3 3 4 4 5 в настоящее время возвращает 3. Я хотел бы reutrn 3 и 4.
Логически я бы сказал, что оператор if, проверяющий переменную, которая чаще всего встречается против второго наиболее частого, будет работать. Конечно, есть возможность 400 режимов, если тестовые данные достаточно велики, хотя. Поэтому мне нужно создать цикл, который проходит проверку и завершает работу, когда текущая переменная больше не равна той, которая встречается на реже менее. Я просто не уверен, как это сделать. Любые советы о том, с чего начать?
Из вашего примера ("1 2 3 3 4 4 5"), похоже, вектор сортируется. Это так? – jogojapan
Да, это отсортировано, это первое, что я сделал, чтобы найти значения max и min для вектора. – Sh0gun