我正在尝试使用C ++中的哈希表解决编程问题。它应该是哈希表的相当简单的实现。我对哈希表非常陌生,这是我第一次尝试实现。
问题是给了我一个包含整数的数组。除了一个整数外,所有其他整数都会重复两次。我必须找到一个没有的整数。
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;
}
输出:
0:0
1:0
2:10
3:0
4:0
答案 0 :(得分:1)
std::map
是一棵树,而不是哈希表。对于哈希表,您需要std::unordered_map
。
但要回答您的问题:
您可以使用地图iterator获得唯一的剩余值:
if (!mymap.empty()) {
cout << mymap.begin()->first;
}
但是要注意-调用cout << mymap[X]
时,它还会将 X
添加到地图。因此,最后删除所有这些调试行。
顺便说一句-当您没有值时,只有一个键,则可以使用set
(或unordered_set
)代替。
答案 1 :(得分:1)
只需增加映射中的值即可,因为整数是默认构造的(并因此初始化为exports.storeContact5 = functions.https.onCall((data, context) => {
// First print is working fine
console.log('test');
var recieverId = 'WqHxLoYvRxR9UK8sFJZ9WxTOIE32';
const check = admin.firestore().collection('users').doc(recieverId).get();
return check.then(testValue => {
console.log(testValue.data().nickname);
return {repeat_message: 'ok!'};
}).catch(err => {
console.log('Error getting document', err);
throw new functions.https.HttpsError('Error getting document', err);
});
});
):
0