map.end指向的元素是容器中最后一个元素之后的元素,是一个 理论上的元素 ,实际并不存在。
因此指向它的迭代器不能够被解引用(Dereferenced)。
引入map.end的目的是为了操作方便,比如通常和map.begin配合,确定容器的范围:
for (std::map<string,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it){
//其它代码
}
如果试图用解引用的方式输出map.end的值,其结果是不确定的,换句话说,是没有意义的。
看一下图就更清楚了:
在map中存在一个frist和second 由于你使用的是map,所以 frist指的就是你的string,second值得就是int的这个值。所以 你要输出it所指的当前迭代器的值,需要it->second;
例如:
map<string, int> m;
m["hello"] = 1024;
map<string, int>::iterator p = m.begin();
p->first; // 这个是 string 值是 "hello"
p->second; //这个是 int 值是 2014;
和你的p.end()是类似的。
如果还有什么问题可以追问。。
使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。
使用find,返回的是被查找元素的位置,没有则返回map.end()。
可以使用map.rbegin().