使用地图在矢量中查找多个模式

时间:2012-02-21 03:07:09

标签: c++ vector maps mode

所以我已经有一段时间处于这种模式状态,并得到了一些帮助,想知道如何在这里做到这一点,并认为我可能会要求更多的帮助。我已经弄清楚了这一点。

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,如果没有任何一个map值超过1,则返回没有模式。现在我一直试图找出超过1的情况下的内容。一种模式,例如1 2 3 3 4 4 5当前返回3.我想重新获得3和4。

逻辑上我会说if语句检查最频繁发生的变量对第二个最常见的变量是可行的。当然,如果测试数据足够大,则可能有400种模式。所以我需要创建一个循环,当当前变量不再等于比它更频繁出现的变量时,检查并退出。我真的不确定该怎么做。关于从哪里开始的任何建议?

1 个答案:

答案 0 :(得分:1)

正如您所指出的,模式不一定是唯一的。

因此,您应该将答案作为一组数字提供,正如您所说的那样。

我会创建一个向量来存储集合中的唯一模式集,然后输出模式向量的内容。

e.g。

std::vector<float> Modes;

// 3 is detected as mode as it occurs 3 times in your set
Modes.push_back(3);

// 4 is also detected as mode, since it also occurs 3 times in your set
Modes.push_back(4);

// output the modes for the set
std::cout << "the following mode(s) were detected in the set";
for( int n = 0; n < Modes.size(); n ++ )
{
  std::cout << "Mode: " << Modes[n] << "\n";
}

希望这是有道理的