我有一个包含5个字符串的数组,我希望能够将字符串相互比较,以确定是否存在多数,并返回该多数。所以如果:
a[0] = "dog";
a[1] = "dog";
a[2] = "dog";
a[3] = "dog";
a[4] = "cat";
我想要归还“狗”。在2个相同,2个相同和一个的情况下,我希望它返回“没有多数”。有没有办法在没有大量if语句的情况下做到这一点,换句话说,优雅呢?
答案 0 :(得分:4)
你可以使用字典:
std::unordered_map<std::string, unsigned int> historgram;
std::string most_popular;
unsigned int m = 0;
bool unique = false;
for (s : a)
{
unsigned int & i = histogram[s];
++i;
if (i == m) { unique = false; }
else if (i > m) { unique = true; m = i; most_popular = s; }
}
return unique ? most_popular : "no majority"'
答案 1 :(得分:2)
将它们放在哈希表中,其中键是单词,值是出现次数。当您将它们放入哈希表时,检查最大计数。
不仅你避免使用ifs,而且(最重要的是)无论数组的长度是多少都可以。
答案 2 :(得分:1)
一个简单的方法是让std::map<std::string, int>
将每个字符串映射到数组中的频率。
for (auto str : a) {
frequencies[str]++;
}
然后,您可以在之后搜索地图以获得最高频率,或者您可以在上面的循环中跟踪到目前为止的最大值。