我正在嘗試編寫一個函數,它需要一個矢量,然後使用映射計算矢量中每個元素的頻率。頻率最高的那個被推入一個新的向量,然後我試圖返回要在我的主函數中輸出的向量。使用映射查找多個模式的矢量C++
vector<double> mode(vector<double> v)
{
sort(v.begin(),v.end());
vector<double> modes;
map<int,double> frequencyCount;
for(size_t i; i<v.size(); i++)
frequencyCount[v[i]]++;
double current_max = 0;
for (auto iter = frequencyCount.cbegin(); iter != frequencyCount.cend(); ++iter)
{
if (iter ->second > current_max)
{
modes.push_back(iter->first);
current_max = iter->second;
}
}
if (current_max == 1)
{
cout << "No mode exists." << endl;
}
else
return modes;
}
我然後調用它的主:
int main()
{
vector<double> m = mode(v);
cout << "Mode: ";
for (size_t i; i<m.size(); i++)
cout << m[i];
}
沒有錯誤,但沒有什麼是輸出...什麼建議嗎?
在'main'其中'v'限定並填充? –
您的地圖類型已顛倒過來。您還需要初始化它。它應該是'std :: map frequencyCount(v.size(),0);' –
正如@KurtStutsman指出'std :: map'中的類型是相反的(即它應該是'std :: map'),但浮點不精確,使用'double'作爲鍵可能不會像您所期望的那樣運行。 –