1.在使用*map指针类型时,不可使用类似于数组的下标寻址方法。编译器会报错,“base operand of “->” has non-pointer-type…….”。
出现此问题时,可利用find()函数返回所需元素的迭代器iter。通过iter->second获取所需值,可避免编译器报错。
2.在利用遍历删除map中元素时,注意迭代器的使用,使用不当会造成迭代器的失效。因为,当迭代器所指向元素被删除之后,此迭代器所指向位置即为一个已经不存在的位置(关联容器的特性),此时迭代器失效。
为避免这一情况,应该:
xxx.cpp
std::map<int,int> A;
std::map<int,int>::iterator iter;
for (int i = 0;i < 5;i++)
{
//避免对空map进行读写操作
A.insert(pair<int,int>(i,i));
}
for (iter == A.begin();iter != A.end();)
{
A.erase(iter++);
//C++ 11标准中使用该方法,erase返回值为一个指向当前 下一位置的迭代器
//iter = A.erase(iter);
}
3.通常利用for循环遍历map时,程序每次都是对map从头进行遍历。但在有些情况下,遍历会在某种条件下被终止,并需要记录当前的结束位置,下次运行时,从此位置继续遍历。因此,需要用一个迭代器来记录下次执行的起始位置(即先前执行结束的下一个位置)。值得注意,其中的具体写法:
xxx.cpp
std::map<int,int> B;
std::map<int,int>::iterator iter;
for (int i = 0;i < 5;i++)
{
//避免对空map进行读写操作
B.insert(pair<int,int>(i,i));
}
std::map<int,int>::iterator iterB = B.begin();
for(iter == iterB;iter != B.end();iter++)
{
//不可直接写为iterB = iter++;否则将无法使iterB指向下一位置
iterB = iter;
iterB++;
}