<map>的常用操作
map的遍历可以通过迭代器实现,也可以用指针形式来实现,在前面已经说过了,不再重复。下面介绍一下map的常用操作
1. 判断map容器中是否存在某一关键字,用map自带的成员函数count(),参数为关键字,返回值为int型数据。
返回值为0或1,若存在返回1,不存在返回0。
2. 在map容器里面查找某一数据,用成员函数find(),参数为关键字,返回一个迭代器,查找成功返回数据所在位置的迭代器,
查找失败返回等于end的迭代器。
下面展示一下count()、find()的用法,看代码
1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 int main() 6 { 7 map<int,string> mp; 8 map<int,string>::iterator iter; 9 mp.insert(pair<int,string>(1,"abc")); 10 mp.insert(pair<int,string>(2,"def")); 11 mp.insert(pair<int,string>(3,"ghi")); 12 iter=mp.begin(); 13 int flag1=mp.count(2); //判断map里是否存在该关键字;让关键字做参数,返回int型,查找成功返回1,查找失败返回0 14 cout<<"flag1=1表示在map查找关键字2成功,flag1=0表示查找失败:flag1="<<flag1<<"\n"; 15 16 iter=mp.find(3); //在map里查找数据,让关键字做参数;返回迭代器,查找成功返回数据所在位置的迭代器,查找失败返回等于end的迭代器 17 int flag2=(iter==mp.end()); 18 cout<<"在map查找关键字3,flag1=0表示查找成功,flag1=1表示查找失败:flag2="<<flag2<<" "<<iter->first<<" "<<iter->second<<"\n"; 19 return 0; 20 }
结果如下:
3. 删除map中的数据
删除的话要用erase()函数,它有三个重载了的函数。分别用迭代器来删除、用关键字来删除、也可以成片的删除数据。下面来演示一下
1 #include<iostream> 2 #include<string> 3 #include<map> 4 using namespace std; 5 int main() 6 { 7 map<int,string> mp; 8 map<int,string>::iterator iter,iter1; 9 mp.insert(pair<int,string>(1,"abc")); 10 mp.insert(pair<int,string>(2,"def")); 11 mp.insert(pair<int,string>(3,"ghi")); 12 mp.insert(pair<int,string>(4,"jkl")); 13 mp.insert(pair<int,string>(5,"mno")); 14 mp.insert(pair<int,string>(6,"pqr")); 15 mp.insert(pair<int,string>(7,"stu")); 16 iter=mp.begin(); 17 cout<<"-------第一次删除后剩余数据-------\n"; 18 mp.erase(iter); //用迭代器删除第一个数据,删除后之前的迭代器就会失效 19 for(iter=mp.begin();iter!=mp.end();iter++) //此时iter已失效,用的时候需要再重新赋值 20 cout<<iter->first<<" "<<iter->second<<"\n"; 21 cout<<"-------第二次删除后剩余数据-------\n"; 22 mp.erase(5); //按照关键字来删除数据 23 for(iter=mp.begin();iter!=mp.end();iter++) //此时iter已失效,用的时候需要再重新赋值 24 cout<<iter->first<<" "<<iter->second<<"\n"; 25 cout<<"-------第三次删除后剩余数据-------\n"; 26 iter=mp.begin(); 27 iter1=mp.end(); 28 --iter1; 29 mp.erase(iter,iter1); //删除除了最后一个数据之外的所有数据 30 for(iter=mp.begin();iter!=mp.end();iter++) //此时iter已失效,用的时候需要再重新赋值 31 cout<<iter->first<<" "<<iter->second<<"\n"; 32 return 0; 33 }
结果如下:
4. 下面介绍一下map常用的成员函数
push_back();向map容器的末尾位置添加字符
push_pop(); 删除map容器里的末尾元素
begin();返回一个指向容器中第一个元素的迭代器
end();返回一个指向容器中最后一个元素的下一个位置的迭代器
rebegin();反向迭代,返回指向最后一个元素的下一个位置的迭代器
rend(); 反向迭代,返回指向第一个元素的的迭代器
at();此成员函数有参数,关键字是下标。作用类似于[ ]操作符,用来对指定下标位置的元素进行随机访问,可进行存取及修改操作
size();返回map的尺寸,即map的大小
mp1.swap(mp2);交换容器mp1和mp2
clear();清空当前容器
empty();判断容器是否为空,为空返回1,非空返回0