C++ 在排序数组中查找支配项
我对代码片段有问题。我想在已经排序的数组中找到优势。问题是,当数组中有两个或多个主元素时,它只打印一个。我的意思是这样的情况:C++ 在排序数组中查找支配项,c++,arrays,C++,Arrays,我对代码片段有问题。我想在已经排序的数组中找到优势。问题是,当数组中有两个或多个主元素时,它只打印一个。我的意思是这样的情况: 数字:1,1,1,2,2,3,3,3,4,5有几种不同的方法可以做到这一点,但几乎所有的方法都需要多次传递数据 这样做的一个简单方法是,使用例如A。将容器中的值用作键,并将每个值的计数用作数据 然后,您需要对完整容器进行一次遍历以填充映射,对映射进行两次遍历—一次查找最大计数,另一次查找等于最大计数的所有条目 是的,您需要三次传递才能找到所有主要元素,但在您的示例中,第
数字:1,1,1,2,2,3,3,3,4,5有几种不同的方法可以做到这一点,但几乎所有的方法都需要多次传递数据 这样做的一个简单方法是,使用例如A。将容器中的值用作键,并将每个值的计数用作数据 然后,您需要对完整容器进行一次遍历以填充映射,对映射进行两次遍历—一次查找最大计数,另一次查找等于最大计数的所有条目 是的,您需要三次传递才能找到所有主要元素,但在您的示例中,第二次和第三次传递仅循环五个元素,而不是原始容器的所有十一个元素
如果未对原始容器进行排序,上述方法也有效。一种简单的方法,尽管效率低下,但可以再次循环整个数组,并打印所有频率等于发生频率的元素。您可以使用计数排序将排序和查找主项统一起来。由于您处理整数,一个简单的映射可以将您的值存储为键,并将该值的计数存储为值。若你们追踪当前的主导位置,那个么你们将能够在单通道地图中输出它们。最坏的情况是,如果您有许多不同的值,那么您可能不应该使用此方法。如果您修复了代码标识,您可能已经注意到主循环在if occurrency>max测试块之后结束。打印发生在循环之外,只能打印最后找到的文件。
n- number of integers, initiated by user
int t[n];
...generating random numbers, sorting...
int actuall, max, dominant, occurency;
max = 0;
for(int i = 0; i<n; i++)
{
actuall= t[i];
occurency = 0;
for(int j = 0; j<n; j++)
{
if(t[j] == actuall) occurency++;
}
if(occurency > max)
{
max = occurency;
dominant = actuall;
}
}
if(max == 1){
cout<<"\nThere is no dominant";
}
if(max > 1) {
cout << endl <<"Dominant: " << dominant <<", occurency: " << max << endl;
}