map中所有元素都是pair,pair中的第一个元素是key(键值),起到索引作用,比如1号张三,2号李四,1号和2号均能起到索引作用,第二个元素是value(实值)
所有的元素都会根据key值进行排序
本质:map/multimap属于关联式容器,底层结构是二叉树实现
优点:可以快速根据key值找到value值
map不允许容器中有重复的key值,multimap 可以
map容器的构造和赋值
#include<iostream>
#include<map>
using namespace std;
void test01() {
//1.map容器的初始化map<int, int> mymap; //第一个参数key的类型,第二个参数value类型
//插入数据 pair.fist key值 pair.second value值
//第一种mymap.insert(pair<int, int>(10, 10));
//第二种mymap.insert(make_pair(20, 20));
//第三种mymap.insert(map<int, int>::value_type(30, 30));
//第四种mymap[40] = 40;mymap[10] = 20;//发现如果key不存在,就会创建pair插入到map中//如果key存在,就会修改key对应的值//如果[]去访问map中一个不存在的key,map会将访问的key插入到map中,并且给value一个默认值//拷贝构造map<int, int>m2(mymap);for (map<int, int>::iterator it = m2.begin(); it != m2.end(); it++)cout << "key:" << it->first << " " << "value:" << it->second << endl;//容器赋值map<int,int>m3;m3=m2;//打印 for (map<int, int>::iterator it = mymap.begin(); it != mymap.end(); it++) {
cout << "key:" << it->first << " " << "value:" << it->second << endl;}//打印 通过迭代器}int main() {
test01();return 0;}
map容器的大小和交换
.size() 返回容器中元素的数目
empty()判断容器是否为空
swap()如:m.swap(m2) m与m2交换
;
void test01()
{
map<int,int> mp;mp.insert(pair<int,int>(1,10));mp.insert(pair<int,int>(2,10));mp.insert(pair<int,int>(3,10));mp.insert(pair<int,int>(4,10));if(mp.empty())cout<<"mp为空"<<endl;else{
cout<<"m不为空"<<endl;}cout<<mp.size()<<endl;
}
int main()
{
test01();return 0;
}
map删除
clear() 清除所有元素
erase(pos) 删除pos迭代器所指的元素,返回下一个元素的迭代器
如n.empty(3) 是删除key值为3的元素
m.erase(m.begin(),m.end())按区间删,清空操作
map容器的查找和统计
对map容器进行查找和统计数据
find(key) 查找key是否存在,返回该键元素的迭代器
count(key) 统计key的元素个数
map不允许重复插入key元素,所以对于count而言,要么是0要么是1
#include<bits/stdc++.h>
#include<map>
using namespace std;
void test01()
{
map<int,int>mp;mp.insert(pair<int,int>(1,10));mp.insert(pair<int,int>(2,10));mp.insert(pair<int,int>(3,10));mp.insert(pair<int,int>(4,10));map<int,int>::iterator pos=mp.find(3);//find返回的是一个迭代器 if(pos!=mp.end()){
cout<<"找到了这个元素"<<pos->first<<pos->second<<endl; }int num=mp.count(3);cout<<"num="<<num<<endl;
}
int main()
{
test01();return 0;
}
map容器的排序
map容器默认的排序规则是按照key值从小到大排,利用仿函数可以改变排序规则
#include<bits/stdc++.h>
#include<map>
using namespace std;
class mycompare
{
public:bool operator()(int v1,int v2){
//降序return v1>v2;}
};
void test01()
{
map<int,int,mycompare>mp;mp.insert(pair<int,int>(1,10));mp.insert(pair<int,int>(2,10));mp.insert(pair<int,int>(3,10));mp.insert(pair<int,int>(4,10));for (map<int, int,mycompare>::iterator it = mp.begin(); it != mp.end(); it++) cout << "key:" << it->first << " " << "value:" << it->second << endl;
}
int main()
{
test01();return 0;
}
最后一个仿函数是有关c++中的重载,还不是太懂,先暂且一记吧!万一以后用得到呢!