STL容器之map/multimap
2022-10-12 本文已影响0人
二进制人类
构造函数
map<T1, T2> mapTT;//map 默认构造函数:
map(const map &mp);//拷贝构造函数
赋值操作
map& operator=(const map &mp);//重载等号操作符
swap(mp);//交换两个集合容器
大小操作
size();//返回容器中元素的数目
empty();//判断容器是否为空
insert(...); //往容器插入元素,
删除
clear();//删除所有元素
erase(pos);//删除 pos 迭代器所指的元素,返回下一个元素的迭代器。
erase(beg,end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
erase(keyElem);//删除容器中 key 为 keyElem 的对组。
查找
find(key);//查找键 key 是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回 map.end();
count(keyElem);//返回容器中 key 为 keyElem 的对组个数。对 map 来说,要么是 0,要么是 1。对 multimap 来说,值可能大于 1。
lower_bound(keyElem);//返回第一个 key>=keyElem 元素的迭代器。
upper_bound(keyElem);//返回第一个 key>keyElem 元素的迭代器。
equal_range(keyElem);//返回容器中 key 与 keyElem 相等的上下限的两个迭代器。
实例
#include <iostream>
#include <map>
using namespace std;
void printMapIntString(map<int,string> &m)
{
map<int,string>::const_iterator it=m.begin();
for(;it!=m.end();it++)
{
//*it == pair<int,string>
cout<<(*it).first<<" "<<(*it).second<<endl;
}
}
int main()
{
map<int,string> m;
m.insert(pair<int,string>(10086,"移动"));
m.insert(make_pair(10010,"联通"));//推荐
m.insert(map<int, string>::value_type(1000, "电信"));
m[9527]="阿星";//key值必须存在(或创建新内容)
//cout<<m[2000]<<endl;//会给你创建一个没有实值的键值为2000的内容
printMapIntString(m);
cout<<m[10010]<<endl;//m[10010]等价于key为10010的实值
map<int,string>::const_iterator ret;
ret = m.find(10086);
if(ret != m.end())
{
//*ret == pair<int,string>
cout<<(*ret).first<<" "<<(*ret).second<<endl;
}
pair< map<int,string>::const_iterator ,map<int,string>::const_iterator > pr;
pr = m.equal_range(10010);
if(pr.first != m.end())
{
//*pr.first == pair<int,string>
cout<<"找到下限:"<<(*pr.first).first<<" "<<(*pr.first).second<<endl;
}
if(pr.second != m.end())
{
//*pr.first == pair<int,string>
cout<<"找到上限:"<<(*pr.second).first<<" "<<(*pr.second).second<<endl;
}
return 0;
}
multimap
#include <iostream>
#include <map>
using namespace std;
int main()
{
multimap<int,string> m;
m.insert(pair<int,string>(10086,"移动"));
m.insert(make_pair(10000,"联通"));
m.insert(make_pair(10000, "电信"));
m.insert(make_pair(9527, "lucy"));
multimap<int,string>::const_iterator it=m.begin();
for(;it!=m.end();it++)
{
//*it == pair<int,string>
cout<<(*it).first<<" "<<(*it).second<<endl;
}
cout<<m.count(10000)<<endl;
return 0;
}