遍历unordered_map cpp的问题

Posted

技术标签:

【中文标题】遍历unordered_map cpp的问题【英文标题】:problem in traversing through unordered_map cpp 【发布时间】:2020-08-11 12:53:09 【问题描述】:

我遍历unordered_map时只有一半的测试用例通过,但是当我使用vector时它们都通过了,我的代码有什么错误吗?

#include<bits/stdc++.h>
using namespace std;
int main()

    int n;  cin>>n;
    unordered_map<int,int> mp;
    vector<int> v;  v.reserve(n);
    while(n--)
    
        int x,y;  cin>>x>>y;
        int h=y+x;
        if(mp[h]==0) v.push_back(h); 
        mp[h]++;
    
    int s; cin>>s;  int sa=0;
    for(auto i:mp)
    
        int j=i.first+s;
        long long u=mp[j]*(i.second);
        sa=sa+u;
    
    cout<<sa;

【问题讨论】:

你想做什么?顺便说一句,这看起来像 UB,因为默认插入了 int if(mp[h]==0) @pptaszni 是值初始化的,这里没有UB。 测试用例在测试什么?你的代码期望做什么?您的代码中有什么意外? 【参考方案1】:

在这个循环中:

for(auto i:mp)

    int j=i.first+s;
    long long u=mp[j]*(i.second);
    sa=sa+u;

当您执行mp[j] 时,您可能会修改mp,如果j 不是unordered_map 中的键。修改您在 range-for 循环中迭代的范围会调用未定义的行为。

您可以使用find 检查密钥j 是否存在并在这种情况下执行其他操作(但不要修改unordered_map)。

【讨论】:

以上是关于遍历unordered_map cpp的问题的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 该软件是名为“Arduino Uno Port Control”的项目的Arduino Uno固件。该项目的目的是控制数字化

指定构造 boost::unordered_map 时的最小桶数

如何使用 UNO 遍历 OpenOffice/LibreOffice 中的整个文档

C++17 中 std::unordered_map 的推导指南

c_cpp 存储器使用的-的-unordered_map.cpp

如何在c ++中遍历unordered_map的unordered_map的unordered_map