给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
Given m sets of n elements .Find the element which occurs in maximum number of sets in C++
给定包含n
元素的n
整数的m
集合,找到出现在最大集合数中的元素,而不是出现在最大次数中。
这是我实现的算法。
- 逐个扫描输入
- 对于每个元素,计数器值都会递增此计数器表示不在集合内的集合中出现的频率我希望我清楚
- 从计数
max(count)
输出最大元素
int main(){
set <int> inner1; //Here ,I have implemented just 2 sets
set <int> inner2;
set< set<int> > outer; //a set of sets
set< set<int> >:: iterator new_it;
set<int >::iterator it;
map <int ,int> count; //the counter
cout<<"enter the number of sets"<<endl;
cin>>m;
cout<<"enter the number of elements in each set"<<endl;
cin>>n;
for (int i=0;i<n;i++){
int temp;
inner1.insert(temp);
}
for (int i=0;i<n;i++){
int temp;
inner2.insert(temp);
}
outer.insert(inner1); // a set of two sets .
outer.insert(inner2);
for (){
for (){
// THe MAIN CODE
}
我的问题-
- 我希望以这样的方式实现它,即它可以使用用户输入创建
m sets in a set
。我目前尝试将其实现为2个集合,但如何将其实现成m
集合根据用户的意愿
cout<<"enter the number of sets"<<endl;
cin>>m;
cout<<"enter the number of elements in each set"<<endl;
cin>>n;
我希望你明白的要点
- 获取元素的算法,该元素出现在最大数量的集合中,即主代码
提前感谢。
我只编写易于理解的代码:
unordered_map<int, int> global;
for(set<int> &s : sets){ //for each set you have
for(int si : s) { //for each element of the set (all unique by definition)
global[si]++;
}
}
int mostFrequent = *sets[0].begin(); //any existing element in any set is allowed
int frequency = global[mostFrequent];
for (auto& it: global) { //for each element in all sets
if(it.second > frequency) {
mostFrequent = it.first;
frequency = it.second;
}
}
cout<<"answer is "<<mostFrequent<<endl;
你的问题有点模糊,因为根据定义,set
中不会有重复的元素,所以强调你不想要出现在">最大次数";,因为它直接来自CCD_ 8的定义,该元素将与最大集合数中出现的元素相同。
如果您指的是允许重复元素的set
,则应使用vector
或list
。在这种情况下,解决方案是将这种结构转换为set
。
@Daniel你也可以"累积";结果(由于std::accumulate可以用于所有内容(
using pint = std::pair<int, int>;
auto res = std::accumulate(count.begin(), count.end(), pint(0,0),
[](const auto& e1, const auto& e2) { return e1.second > e2.second ? e1 : (pint)e2;
}
);
https://godbolt.org/z/fha8v8
相关文章:
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- c++找不到具有相同哈希的无序集合元素
- 从C++无序集合中高效提取元素
- 如何在比较时更改集合元素的值(在 c++ 中)?
- 打印无序映射的第二个元素,即集合
- 在集合中查找使用结构C++的元素
- 如何在集合中迭代替代元素(或进行特定大小的飞跃)?
- 消除集合的第一个元素
- 将集合的随机元素添加到列表中,然后将其从原始集合中移除
- 将字符串集合中的元素添加到字符串集合的向量中
- C++ 如何以特定模式遍历矢量的不同集合元素
- 为什么编译器不优化集合元素上的空范围循环?
- 集合元素类中定义的集合的比较器
- 修改集合元素
- 如何更改集合元素
- groot集合-元素访问
- 在迭代器上是否有STL适配器调用每个集合元素的回调
- 将多个集合元素合并为一个集合
- 使用哪种类型的指针来实现对集合元素的共享访问
- 在没有默认构造函数时初始化 STL 集合元素(不是指针)