一、简介
1.map中所有元素都是pair
2.pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
3.所有元素都会根据元素的键值自动排序
二、构造
方法1:map默认构造函数:map<T1, T2> mp;
其中T1是键,T2是值,mp是名字,可以随意起。
而T1和T2几乎可以是任意类型,比如
内置数据类型: 如整数 (int
, double
, char
)、字符串 (std::string
)、指针等。
自定义类型: 只要满足比较和复制的要求,你可以使用自定义的类或结构体作为键和值。
用法:map<int,int> m1; map<int,char> m2; map<string,int> m3。可以任意组合
方法2:拷贝构造函数:map(const map &mp);
用法:map<int,int> m4(m1);这样m4就拷贝了m1的值。
三、插入和删除
先定义一个map map<int,int>m;
插入(常用):
1.m.insert(pair<int,int>(1,10));
2.m.insert(make_pair(2,20));
我个人喜欢第二种。
删除:
1.m.erase(m.begin());删除第一个
2.m.erase(1);删除键为1的
清空:
1、m.erase(m.begin(),m.end());
2、m.clear();
四、大小和交换
size();
//返回容器中元素的数目
m.size();
empty();
//判断容器是否为空 为空返回1,不空返回0
m.empty();
swap(st);
//交换两个集合容器
m1.swap(m2);
五、查找和统计
find(key);
//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);
//统计key的元素个数,对于map,只会返回0和1,因为key不能重复
#include <map>
//查找和统计
void test1()
{
map<int, int>m;
m.insert(make_pair(1, 11));
m.insert(make_pair(2, 22));
m.insert(make_pair(3, 33));
//查找
//map<int, int>::iterator pos = m.find(2);
auto pos = m.find(2);
if (pos != m.end())
{
cout << "找到了元素 key = " << pos->first << " value = " << pos->second << endl;
}
else
{
cout << "未找到元素" << endl;
}
//统计
int num = m.count(3);
cout << "num = " << num << endl;
}
int main() {
test1();
return 0;
}
六、其他
一个打印map的函数,挺好用的
void printMap(map<int, int> &m)
{
//for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
//for的简便写法
for (auto &it : m)
{
cout << "key:" << it.first << " value:" << it.second << endl;
}
cout << endl;
}
知识内容参考:黑马C++ map部分
如有侵权,联系删除