STL(1) —— map

我与影子孤独终老i 提交于 2020-02-04 03:55:12


这篇文章是在做一道ccf题的时候起意写的,也是为了方便自己以后回顾叭。包含一些map的常用简单操作。

一、插入

在使用map时,插入有3种方法。

  1. 用insert函数插入pair。
  2. 用insert函数插入value_type数据。
  3. 用array数组方式插入。
   map<int,string> student;
   //1
   student.insert(pair<int,string>(000,"student0");
   //2
   student.insert(map<int,string>::value_type(001,"student1");
   //3
   student[12] = "student12";

这三种方法第一种和第二种效果是一样的,不能违背map的唯一性,也就是如果原本map容器种存在该key值,那么插入失败。但是第三种可以插入覆盖原值。

二、删除

map容器种和删除相关的函数有erase、clear、empty等。

  • empty
    用来判断map容器是否为空。函数返回值为bool型,返回true说明是空map,反之则表示map中有元素。
  • clear
    用来清空map容器。
  • erase
    erase函数用来删除指定元素,map中写了三种erase函数方便我们使用。
    1、迭代器删除
    2、用关键字删除
    3、范围删除
//迭代器刪除
iter = student.find("student0");
student.erase(iter);
//用关键字刪除
int n = student.erase("student1");//如果刪除了會返回1,否則返回0
//用迭代器范围刪除 : 把整个map清空
student.erase(student.begin(), student.end());
//等同于student.clear()

三、查询

map容器中提供对关键字进行查询,也就是find函数。
find函数如果找到就返回指向该关键字的迭代器,如果找不到就返回指向end的迭代器。

iter = student.find("student0");
if(iter!=student.end()){
	cout<<"student0 is at"<<iter->second<<endl;
}
else{
	cout<<"Didn't find student0"<<endl;
}

四、排序

排序这部分涉及的内容很多,要详细写可以再单独写一篇文了hh,想要详细了解的伙伴们可以看下文附带的链接,这里只是简单写一下。

map为实现快速排序,内部本身就是按照key值有序排列的(红黑树),所以我们插入键值对时会自动按照key值顺序存储,这也是作为键值key的类型必须要能够进行<运算的原因。

map里面对key值的两种排序方法都提供了(升/降序),一般默认是使用less(升序),你也可以指定第三个参数为为greater(降序)。

map<string,int,greater<string>> student; //在定义时声明
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!