STL之六:map/multimap用法详解
2016-03-08 16:42
381 查看
转载于:/article/1556299.html
map和multimap内部的数据结构也是平衡二叉树。
map和multimap根据元素的key自动对元素进行排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。
map m(op):以op为排序准则,产生一个空的map
map m1(m2):复制c2中的元素到c1中
map m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射
map m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射。
m.~set()销毁所有元素,释放内存
multimap mm:创建空映射,不包含任何元素
multimap mm(op):以op为排序准则,产生一个空的multimap
multimap m1(m2):复制m2中的元素到m1中
multimap m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射
multimap m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射
m.~multimap()销毁所有元素,释放内存
bool empty() const:判断容器是否空,若返回true,表明容器已空。
iterator insert(iterator it,const value_type& x):在迭代指针it处插入元素x
void insert(const value_type *first,const value_type* last):插入[first, last)之间元素
iterator erase(iterator it):删除迭代指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
size_type erase(const Key& key):删除键值等于key的元素
上述代码运行结果为
上述代码运行结果为:
如果想往map/multimap中修改一个映射的值,应先插入一个新映射,再把与修改的映射删除。
iterator end():返回尾元素的迭代器指针
reverse_iterator rbegin():返回尾元素的逆向迭代器指针
reverse_iterator rend():返回首元素前一个位置的迭代器指针
map/multimap
使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。multimap允许重复元素,map不允许重复元素。map和multimap内部的数据结构也是平衡二叉树。
map和multimap根据元素的key自动对元素进行排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。
常用函数
1.构造函数和析构函数
map m:创建空映射,不包含任何元素map m(op):以op为排序准则,产生一个空的map
map m1(m2):复制c2中的元素到c1中
map m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射
map m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射。
m.~set()销毁所有元素,释放内存
multimap mm:创建空映射,不包含任何元素
multimap mm(op):以op为排序准则,产生一个空的multimap
multimap m1(m2):复制m2中的元素到m1中
multimap m(const value_type *first, const value_type* last):复制[first, last)之间元素构成新映射
multimap m(const value_type *first, const value_type* last,op):以op为排序准则,复制[first, last)之间元素构成新映射
m.~multimap()销毁所有元素,释放内存
#include "stdafx.h" #include <iostream> #include <map> using namespace std; bool fncomp (char lhs, char rhs) {return lhs<rhs;} struct classcomp { bool operator() (const char& lhs, const char& rhs) const {return lhs<rhs;} }; int main () { map<char,int> first; first['a']=10; first['b']=30; first['c']=50; first['d']=70; map<char,int> second (first.begin(),first.end()); map<char,int> third (second); map<char,int,classcomp> fourth; // class as Compare bool(*fn_pt)(char,char) = fncomp; map<char,int,bool(*)(char,char)> fifth (fn_pt); // function pointer as Compare return 0; }
2.大小、判断空函数
int size() const:返回容器元素个数bool empty() const:判断容器是否空,若返回true,表明容器已空。
3.增加删除函数
iterator insert(const value_type& x):插入元素xMap<int, string> mapStudent; mapStudent.insert(pair<int, string>(1, “student_one”));
Map<int, string> mapStudent; mapStudent.insert(map<int, string>::value_type (1, “student_one”));
iterator insert(iterator it,const value_type& x):在迭代指针it处插入元素x
void insert(const value_type *first,const value_type* last):插入[first, last)之间元素
iterator erase(iterator it):删除迭代指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
size_type erase(const Key& key):删除键值等于key的元素
#include "stdafx.h" #include <iostream> #include <map> using namespace std; int main () { map<char,int> mymap; mymap.insert(pair<char,int>('a',10)); mymap.insert(pair<char,int>('z',200)); pair<map<char,int>::iterator,bool> ret; ret = mymap.insert(pair<char,int>('z',500)); if (ret.second == false) { cout<<"element 'z' already existed"; cout<<"with a value of "<<ret.first->second<<'\n'; } map<char,int>::iterator it = mymap.begin(); mymap.insert(it,pair<char,int>('b',300)); mymap.insert(it,pair<char,int>('c',400)); map<char,int> anothermap; anothermap.insert(mymap.begin(),mymap.find('c')); cout<<"mymap contains :\n"; for (it = mymap.begin();it!= mymap.end();it++) { cout<<it->first<<"=>"<<it->second<<'\n'; } cout<<"anothermap contains :\n"; for (it = anothermap.begin();it!= anothermap.end();it++) { cout<<it->first<<"=>"<<it->second<<'\n'; } return 0; }
上述代码运行结果为
#include "stdafx.h" #include <iostream> #include <map> using namespace std; int main () { map<char,int> mymap; map<char,int>::iterator it; mymap['a'] = 10; mymap['b'] = 20; mymap['c'] = 30; mymap['d'] = 40; mymap['e'] = 50; mymap.insert(pair<char,int>('f',60)); cout<<"initial mymap contains :\n"; for (it = mymap.begin();it!= mymap.end();it++) { cout<<it->first<<"=>"<<it->second<<'\n'; } it = mymap.find('b'); mymap.erase(it); mymap.erase('c'); it = mymap.find('e'); mymap.erase(it,mymap.end()); cout<<"now mymap contains :\n"; for (it = mymap.begin();it!= mymap.end();it++) { cout<<it->first<<"=>"<<it->second<<'\n'; } return 0; }
上述代码运行结果为:
如果想往map/multimap中修改一个映射的值,应先插入一个新映射,再把与修改的映射删除。
4.遍历函数
iterator begin():返回首元素的迭代器指针iterator end():返回尾元素的迭代器指针
reverse_iterator rbegin():返回尾元素的逆向迭代器指针
reverse_iterator rend():返回首元素前一个位置的迭代器指针
5.操作函数
const_iterator lower_bound(const Key& key):返回键值大于等于key的迭代器指针 const_iterator upper_bound(const Key& key):返回键值大于key的迭代器指针 int count(const Key& key) const:返回键值等于key的元素的个数 pair<const_iterator,const_iterator> equal_range(const Key& key) const:返回容器中键值等于key的迭代指针[first, last) const_iterator find(const Key& key) const:查找功能,返回键值等于key的迭代器指针 void swap(set& s):交换但映射元素 void swap(multiset& s):交换多映射元素
6.特殊函数
reference operator[](const Key& k):仅在但映射map类中,可以以数组的形式给映射添加键-值对,并可返回值的引用。相关文章推荐
- STL之五:set/multiset用法详解
- STL之四:list用法详解
- STL之五:set/multiset用法详解
- STL之四:list用法详解
- STL之三:deque用法详解
- 原生javascript获取元素样式
- 高斯消元法求矩阵系数
- service的简单使用--后台执行的定时任务
- SSE命令示例代码(转换、加载、置位、存储)
- SSE3 和 SSSE3 Intrinsics各函数介绍
- Redis 学习笔记
- Float 的那些事
- WORD2010没有密码怎么样取消文档保护
- java并发编程:线程安全管理类--原子操作类--AtomicBoolean
- notes:spm多重比较校正
- 蓝桥杯 算法训练 最大的算式
- 矩阵的乘法
- 在Ubuntu上源码安装MySQL+安装问题解决+安全优化
- 在Ubuntu上源码安装MySQL+安装问题解决+安全优化 推荐
- n [Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invo