map映射容器的元素数据是由一个键值和一个映射数据组成的,键值与映照数据之间具有一一映照的关系。map容器的数据结构也采用红黑树来实现的,插入元素的键值不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。由于map与set采用的都是红黑树的结构,所以,用法基本相似。
#include
begin() 返回指向 map 头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果 map 为空则返回 true
end() 返回指向 map 末尾的迭代器
erase() 删除一个元素
find() 查找一个元素
insert() 插入元素
key_comp() 返回比较元素 key 的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向 map 尾部的逆向迭代器
rend() 返回一个指向 map 头部的逆向迭代器
size() 返回 map 中元素的个数
swap() 交换两个 map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素 value 的函数
#include
#include
using namespace std;
map<int,char>mp;//定义map容器
map ::key_type; // 在map容器中,用作索引的键的类型
map ::mapped_type; // 在map容器中,键所关联的值的类型
map ::value_type; // 一个pair类型,它的first元素具有const map ::key_type类型,而second元素则为map :: mapped_type类型。
在学习map接口时,谨记其value_type是pair类型,它的值成员可以修改(second成员),但键成员不能修改。这个value_type相当于map的元素类型,而不是键所对应的值的类型。
对map迭代器进行解引用将产生pair类型的对象,它的first成员存放键,为const,而second成员存放值。
原文链接:https://blog.csdn.net/hero_myself/article/details/52313451
//数组方式插入
mp[1]='a';
mp[1]='b';//key不允许重复,再次插入相当于修改value的值
mp[2]='a';
mp[3]='b';
mp[4]='c';
//insert()方式插入
mp.insert(map<int,char>::value_type(5,'d'));
//通过关键字key删除元素
mp.erase('b');
//输出容器大小
int s=mp.size();
//遍历输出map中的元素
map<int,char>::iterator it=mp.begin();
while(it!=mp.end())
{
cout<<"key:"<<it->first<<" ";
cout<<"value:"<<it->second<<endl;;
it++;
}
mp.clear();//清空容器
it=mp.find(1);//搜索键值为1的元素
/*若该键值存在,则返回该键值所在的
迭代器位置,不存在则返回end()迭代器位置
*/
if(it!=mp.end())
{
cout<<"存在键值为1的元素"<<endl;
}
map本身默认按照key值升序排序
#include
#include
using namespace std;
map<int,char>mp;//定义map容器
int main()
{
//数组方式插入
mp[1]='a';
mp[1]='b';//key不允许重复,再次插入相当于修改value的值
mp[2]='a';
mp[3]='b';
mp[4]='c';
cout<<"根据key值输出对应的value值"<<mp[1]<<endl;
cout<<"无法根据value输出key值"<<mp['b']<<endl;
//通过关键字key删除元素
mp.erase('b');
//insert()方式插入
mp.insert(map<int,char>::value_type(5,'d'));
//输出容器大小
int s=mp.size();
cout<<s<<endl;
//遍历输出map中的元素
map<int,char>::iterator it=mp.begin();
while(it!=mp.end())
{
cout<<"key:"<<it->first<<" ";
cout<<"value:"<<it->second<<endl;;
it++;
}
it=mp.find(1);//搜索键值为1的元素
/*若该键值存在,则返回该键值所在的
迭代器位置,不存在则返回end()迭代器位置
*/
if(it!=mp.end())
{
cout<<"存在键值为1的元素"<<endl;
}
//cout<first<second<
mp.clear();//清空容器
cout<<mp.size()<<endl;
}
包含文件加山#include ,不然cout<<右输出报错
//当元素为结构体时自定义排序
#include
#include
#include
#include
using namespace std;
struct Info
{
string name;
float score;
//重载"<"操作符,自定义排序规则
bool operator < (const Info &a) const
{
if(score==a.score)
return name>a.name;
return score>a.score;
}
};
int main(int argc, char* argv[])
{
map<Info,int> m;
Info info;
info.name="Jack";
info.score=60;
m[info]=25;
info.name="Tom";
info.score=60;
m[info]=30;
info.name="Bomi";
info.score=80;
m[info]=10;
info.name="Peti";
info.score=66.5;
m[info]=30;
map<Info,int>::iterator it;
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).second<<" : ";
cout<<((*it).first).name<<" "<<((*it).first).score<<endl;
}
return 0;
}
感谢大佬,整理的很有条理,转载自:
https://blog.csdn.net/love20165104027/article/details/81515466