因为不懂map的这个点,让我离面试机会又远了一点~,先来看几个代码吧
1 下面的代码输出几?答案是0.
#include <map>
using namespace std;
int main(){
map<int, int> mp;
mp[0] = 1;
printf("%d\n",mp[2]);
return 0;
}
2 下面的代码输出什么?输出 hh
#include <map>
using namespace std;
int main(){
map<int, int> mp;
mp[0] = 1;
for(auto it = mp.begin();it!=mp.end();it++){
if(mp[0]==1){
printf("hh");
}
}
return 0;
}
3 下面的代码呢?会输出什么?输出3个yes吗?不,会直接死循环!
#include <map>
using namespace std;
int main(){
map<int, int> mp;
mp[0] = 1;
//对于map中的每个值,如果不为0,则输出yes,否则输出no
for(auto it = mp.begin();it!=mp.end();it++){
int k = it->first;
for(int i=1;i<4;i++){
if(mp[i+k]!=0){
printf("yes");
}
else{
printf("no");
}
}
// printf("%d\n",mp.size());
}
return 0;
}
把我注释的那一行去掉就会发现,mp的大小一直在增大,因为mp[i+k]!=0这个操作,如果i+k不在mp中,会自动在mp中插入一个新的节点,如果足够巧的话,这个mp永远都遍历不完,比如上面的代码。
所以如果要判断key是否在map中出现,还是老老实实的用mp.find(要查询的key)!=mp.end()。