哈希表在C+中的实现+;-如何返回具有特定值的键 我试图用C++中的哈希表来解决一个编程问题。它应该是相当简单的哈希表实现。我对哈希表非常陌生,这是我第一次尝试实现

哈希表在C+中的实现+;-如何返回具有特定值的键 我试图用C++中的哈希表来解决一个编程问题。它应该是相当简单的哈希表实现。我对哈希表非常陌生,这是我第一次尝试实现,c++,hash,hashtable,C++,Hash,Hashtable,问题是我得到了一个包含整数的数组。除一个整数外,所有整数都会重复两次。我必须找到一个不存在的整数 Input: {1,2,1,3,3} Output: 2 我的解决方案是,我将开始将这些键放入哈希表中,如果我事先在哈希表中找到一个键,我将从哈希表中删除该键 我的代码实现工作正常,但我现在想看看如何返回正确的值(在本例中为2),因为即使在删除键之后,键仍保留值0 这是我的密码: int main() { int num[5] = {1,2,1,3,3}; map <in

问题是我得到了一个包含整数的数组。除一个整数外,所有整数都会重复两次。我必须找到一个不存在的整数

Input: {1,2,1,3,3}
Output: 2
我的解决方案是,我将开始将这些键放入哈希表中,如果我事先在哈希表中找到一个键,我将从哈希表中删除该键

我的代码实现工作正常,但我现在想看看如何返回正确的值(在本例中为2),因为即使在删除键之后,键仍保留值0

这是我的密码:

int main()
{

    int num[5] = {1,2,1,3,3};

    map <int,int> mymap;

    for(int i=0;i<5;i++)
    {
      if(mymap.find(num[i])!=mymap.end())
        {  
          mymap.erase(num[i]);
        }
      else
        {
          mymap[num[i]] = 10; //10 is just a placeholder value. 
        }
    }
    cout<<"0:"<<mymap[0]<<endl;
    cout<<"1:"<<mymap[1]<<endl;
    cout<<"2:"<<mymap[2]<<endl;   //Should only find 10 value in 2
    cout<<"3:"<<mymap[3]<<endl;
    cout<<"4:"<<mymap[4]<<endl;
}

std::map
是一个树,而不是哈希表。对于所需的哈希表
std::unordered\u map

但要回答你的问题:

您可以使用映射获取唯一剩余的值:

if (!mymap.empty()) {
    cout << mymap.begin()->first;
}
if(!mymap.empty()){
cout优先;
}

但是要小心——当你调用
cout
std::map
时,它是一个树,而不是一个哈希表。对于所需的哈希表
std::unordered\u map

但要回答你的问题:

您可以使用映射获取唯一剩余的值:

if (!mymap.empty()) {
    cout << mymap.begin()->first;
}
if(!mymap.empty()){
cout优先;
}

但是要小心-当调用
cout时,只需增加映射中的值,因为整数是默认构造的(因此初始化为
0
):

int num[5]={1,2,1,3,3};
无序的"我的地图",;

对于(int i=0;i只需增加映射中的值,因为整数是默认构造的(因此初始化为
0
):

int num[5]={1,2,1,3,3};
无序的"我的地图",;

对于(int i=0;ihash表,但您使用的是映射,而不是无序的_映射(前者是标准映射,后者是哈希映射)。哈希表,但您使用的是映射,而不是无序的_映射(前者是标准映射,后者是哈希映射)。由于某些原因,直接实现代码不起作用,但使用您提供给我的链接中的迭代器起作用。如果(!mymap.empty()){auto it=mymap.begin();cout first;}另外,谢谢你把基础知识整理出来。你的回答是有帮助的。A:是的,考虑了SET,回答了更新。应该使用<代码> ->第一个/CODE >(但是考虑使用<代码> SET>代码>,由于某些原因,直接实现你的代码不起作用,但是使用你提供的链接的迭代器工作。如果(.MyMAP.EMPTY()){ AutoIt= MyApp.Read();CUT第一;}也谢谢你的基本知识。你的答案是有用的。啊,是的,想想这个集合,答案更新了。应该使用<代码> ->第一个/代码>(但是考虑使用<代码> SET)
int num[5] = {1,2,1,3,3};

unordered_map <int,int> mymap;

for(int i=0;i<5;i++)
{
   ++mymap[num[i]];
}
cout<<"0:"<<mymap[0]<<endl;
cout<<"1:"<<mymap[1]<<endl;
cout<<"2:"<<mymap[2]<<endl;   //Should only find 10 value in 2
cout<<"3:"<<mymap[3]<<endl;
cout<<"4:"<<mymap[4]<<endl;