C++ 为什么在查找数组中是否存在重复值时,无序的_映射每次都不能给出正确的答案?

C++ 为什么在查找数组中是否存在重复值时,无序的_映射每次都不能给出正确的答案?,c++,arrays,c++11,duplicates,unordered-map,C++,Arrays,C++11,Duplicates,Unordered Map,我已经给出了一个数组,我需要找到数组中是否存在任何重复的元素?(我必须接受用户的输入。) 这是我的第一个代码,它给出了一些测试用例的错误答案: #include<bits/stdc++.h> using namespace std; int main() { // your code goes here int t; cin>>t; while(t--) { int n; cin>>n;

我已经给出了一个数组,我需要找到数组中是否存在任何重复的元素?(我必须接受用户的输入。)

这是我的第一个代码,它给出了一些测试用例的错误答案:

#include<bits/stdc++.h>
using namespace std;

int main() {
    // your code goes here
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        unordered_map<int,int> mp;
        int temp=1;
        for(int i=0,i<n;i++) 
        {
            int x; cin>>x;
            if(mp.find(x)!=mp.end()) 
            {
                temp=-1; break;
            }     
            
            mp[x]++;
        }
        if(temp==-1) cout<<"YES"<<endl; //if duplicate present
        else cout<<"NO"<<endl;
        mp.clear();
        
            
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;

int main() {
    // your code goes here
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        unordered_map<int,int> mp;
        int temp=1;
        for(int i=0,i<n;i++)  
        {
            int x; 
            cin>>x;
               
            
            mp[x]++;
        }
        
        if(mp.size()<n) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
        mp.clear();
        
            
    }
    return 0;
}
#包括
使用名称空间std;
int main(){
//你的密码在这里
int t;
cin>>t;
而(t--)
{
int n;
cin>>n;
无序地图mp;
内部温度=1;
对于(inti=0,i>x;
如果(mp.find(x)!=mp.end())
{
温度=-1;中断;
}     
mp[x]++;
}

if(temp==-1)不能您在第一个代码中使用了
break;
,但在第二个代码中没有使用它

使用
break;
将阻止代码读取部分测试用例,并将其视为下一个文本用例,这将导致错误答案

例如,使用此输入

2
5 5 5 1 2 3
2 2 2
您的第一个代码将被打印出来

YES
NO
而正确的输出是

YES
YES

为了防止这种情况发生,应该删除
中断;

使用调试器。我停止读取
for
宏。如果你想让别人读取你的代码,那么就让它可读。@AbhishekKumar我不同意。它会毫无理由地降低代码的可读性。宏甚至没有在多个地方使用,因此实际上需要更多的代码rite比直截了当的版本更容易理解,你不必去看宏是什么。至于更多的知识,我已经做了35年了。我已经从我的“让我们让它变得聪明”成长起来了阶段。@RetiredInja好的,我已经更新了它。谢谢你指出。@AbhishekKumar整个代码对初学者来说都很简单——所以我认为你在说它不可读之前需要更多的知识——你是这么说的,但是你找不到代码中明显的区别。