std::map如何计算重复项
how does std::map work for counting duplicates
我是cp的初学者,最近我偶然发现了一个使用向量无法解决的问题,因此我检查了解决方案,发现大多数代码中都有map。有人能解释一下std::map在这个特定问题中是如何工作的吗。这是以下解决方案之一:
int main()
{
int n,mx=0,cnt=0,i,x;
cin>>n;
map<int,int>mp;
for(i=0;i<n;i++)
{
cin>>x;
mp[x]++;
if(mp[x]>mx)
{
mx=mp[x];
}
}
cout<<mx<<endl;
return 0;
}
std::map
是一个将一个值关联到一个唯一键的结构。
这样做的净效果是每个不同的键只能有一个值。
因此,在map<int, int> mp
的情况下,与mp[123]
相关联的值是一个整数。在C++映射中,自动创建不存在的元素,因此在第一次访问时,与mp[123]
关联的值将被初始化为0
,并且可以使用mp[x]++
安全地计数。
话虽如此,使用int
键,使用简单的数组也可以实现相同的效果。如果键是密集的,并且已知最大键值,则可以分配数组(向量(并将键用作其中的索引。当键是稀疏的、非数字的或范围未知时,映射很有用。
在您的特定情况下,键的范围似乎是[1..100]。这可以使用数组来解决。不需要地图。
int main()
{
int n, mx = 0, x;
cin >> n;
int mp[101]{};
for (int i = 0; i < n; i++)
{
cin >> x; // 1 <= x <= 100 according to problem definition
mx = max(mx, ++mp[x]);
}
cout << mx << endl;
return 0;
}
mp
是迄今为止每个数字在输入中被看到的次数。它是一系列成对的数字,第一个("键"(取自输入,第二个("值"(为计数。在这个程序中,我们不在乎,但这些对是按密钥排序的。
每次循环时,mp[x]++;
将数字x
的计数加一。如果以前没有看到过这个数字,它会将0增加到1,因为0是默认初始化的int
的值。
然后CCD_ 12被设置为其自身和CCD_。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 STL 函数使用节点的颜色来计算 std::map 节点前身
- 计算表达式字符串由 std::map 中的键组成
- 如何计算C++中非重复值的数量 std::map<Key,Values>
- 在循环外计算map.end()的优势
- 如何声明将使用 map.size() 计算的 int 类型
- 如何为不断变化的“std::map”计算签名
- 使用 std::map<std::string, int> 计算表达式树
- 如何计算存储在map中vector中的元素数量
- 在c++中将两个相关的std::堆栈合并为std::map的计算效率如何?
- 使用map++计算重复项
- 使用map计算每个单词在文件中出现的次数.(c++)
- 用c++计算map中的键值