STL常用函数总结-map

map是STL里面另外一个很方便的容器,它能够实现一种对应,其实数组也是一种对应,是一种数字与数字或者数字与字符的对应,第几个位置上放了某个字符或者数字,而map则是对这种对应的进一步扩展,它提供一对一的数据处理能力,此外由于map的特性,map内部的数据是有序的。

需要的头文件:#include< map >
初始化:map< 关联数据1(key),关联数据2(value) > 名称

经过这样的初始化,就建立起了key-value的关联,相较于前面几种STL容器,map的操作相对复杂一些

①插入
插入一般有三种方式。
第一种是用Insert函数插入pair数据,形如:
m.insert(pair<int,string>(1,“abcd”));
一次插入一个pair对,但是这里pair里面的数据类型要和之前的key-value相对应
第二种是用insert函数插入value_type数据,形如:
m.insert(map< int ,string >::value_type(1,“abcd”));
第三种是直接用数组方式插入,形如:
map< string ,int > m;
m[“abc”]=1;
m[“abd”]=2;
从第三种方式可以看出,map很像是扩展了的数组,数组里的key值只能是数字,而在这里key值可以是任意的数据类型

②大小判断
这个和其它STL操作没什么区别,依然使用size函数
m.size();

③遍历
map的遍历并不像队列需要破坏整个容器才可以实现,map的遍历可以像数组那样实现,下面提供三种方式
第一种是应用前向迭代器,形如:
map<int, string>::iterator iter;
for(iter = m.begin(); iter != m.end(); iter++)
cout<< iter->first<<’ '<< iter->second<<endl;
这里再遍历时需要用到一个指针,让指针一开始指向map的开始位置,从开始位置向后一点一点移动,直到移动到末尾位置,在输出的时候,指针->first是指map的key值,指针->second是指map的value值,通过这样一个指针进行迭代,从而实现遍历

第二种是应用反向迭代器,方式和第一种相似,只不过在循环的起始上有所区别,形如:
map<int, string>::reverse_iterator iter;
for(iter = m.rbegin(); iter != m.rend(); iter++)
cout<< iter->first<<" "<< iter->second<<endl;

第三种是用数组方式进行遍历,形如:
for(int i=0;i<m.size();i++)
cout<<m[i]<<endl;

④查找特定value值
在map里面有特定的函数find(),在操作时需要配合指针使用,形如:
map<int, string>::iterator iter;
iter = m.find(1);
if(iter != m.end())
cout<<"Find, the value is "<< iter->second<<endl;
else
cout<<“Do not Find”<<endl;
这个实际上是由find函数的函数实现来决定的,find是在map里面寻找,如果找到了返回这个值的地址,如果没找到就返回map的结束值,这样就有了这种查找方式

⑤其他函数
empty()  // 如果map 为空,返回true。否则返回 false

size()    // 返回map 中元素的大小,即 key-value 的个数

max_size()   // 返回由于存储空间的限制,map有可能包含的最大元素数。但不保证一定能达到这个数量,有可能在中途申请空间失败。

emplace  高效插入
和 insert的主要区别在于,insert首先构造一个临时 value_type对象,再copy到 map中。而emplace 是直接在map里根据参数构造 value_type对象。更高效。
pair<iterator, bool> emplace(key k, value v);

emplace_hint  提示位置的高效插入
iterator emplace(const iterator pos, key k, value v);
从pos开始查找应该插入的位置,其余和 emplace相同。

erase  删除
(1) iterator erase(const_iterator position);  // 删除迭代器指向的内容, 函数返回 NULL
(2) iterator erase(const_iterator first, const_iterator last);  // 删除迭代器范围内的内容,函数返回NULL
(3) size_type erase(const key_type &k);   // 删除 type 为k的元素,返回删除的数目。对于 map,成功删除返回1,k不存在则返回0
(4) 1,2中如果迭代器无效,会产生 undefined behavior

swap  交换两个 map对象的内容

clear  清空一个容器的所有元素
    
find  查找
在map中查找key 为 k的元素,返回指向它的迭代器。若k不存在,返回 map::end.

count  计数
统计map中 key为k的元素的个数,对于map,返回值不是1(存在),就是0(不存在)

begin() 返回指向map头部的迭代器

clear() 删除所有元素

count() 返回指定元素出现的次数

empty() 如果map为空则返回true

end() 返回指向map末尾的迭代器

equal_range() 返回特殊条目的迭代器对

erase() 删除一个元素

find() 查找一个元素

get_allocator() 返回map的配置器

insert() 插入元素

key_comp() 返回比较元素key的函数

lower_bound() 返回键值>=给定元素的第一个位置

max_size() 返回可以容纳的最大元素个数

rbegin() 返回一个指向map尾部的逆向迭代器

rend() 返回一个指向map头部的逆向迭代器

size() 返回map中元素的个数

swap() 交换两个map

upper_bound() 返回键值>给定元素的第一个位置

value_comp() 返回比较元素value的函数

猜你喜欢

转载自blog.csdn.net/weixin_43849505/article/details/86822846