使用iterator遍历map——C++新手上机疑难点总结⑦
我们知道,map<int, int> mymap中,mymap[ i ] 的默认值为0;但当我们使用 iterator 遍历mymap时,默认值为0的这些记录会被遍历到吗?
1. iterator遍历:
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
vector<int> nums;
nums.push_back(1);
nums.push_back(3);
nums.push_back(5);
nums.push_back(7);
nums.push_back(9);
map<int, int> mymap;
int i;
for(i=0;i<nums.size();i++){
mymap[nums[i]] = 1;
}
map<int, int>::iterator it;
for(it=mymap.begin();it!=mymap.end();it++){
cout << it->first << " ";
}
return 0;
}
输出结果为:
1 3 5 7 9
Process returned 0 (0x0) execution time : 0.256 s
Press any key to continue.
可以看到,使用iterator遍历map时,不会遍历没有修改过value的key,如2,4,6,8;
2. 值为默认值的key一定不会被iterator遍历吗?
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main()
{
vector<int> nums;
nums.push_back(1);
nums.push_back(3);
nums.push_back(5);
nums.push_back(7);
nums.push_back(9);
map<int, int> mymap;
int i;
for(i=0;i<nums.size();i++){
mymap[nums[i]] = 1;
}
map<int, int>::iterator it;
for(it=mymap.begin();it!=mymap.end();it++){
if(mymap[it->first+1]==6){
; //除了访问一次,什么也不干
}
cout << it->first << " ";
if(it->first>10){
break;
}
}
return 0;
}
输出结果为:
1 2 3 4 5 6 7 8 9 10 11
Process returned 0 (0x0) execution time : 0.509 s
Press any key to continue.
可以看到,一旦我们询问过某个key的value,即使我们继续保留其值为默认值0,在使用iterator遍历时扔会遍历这个key。