今天学习map容器
简介:
本质:
优点:
map和multimap区别:
功能描述:
函数原型:
构造:
map mp;
//map默认构造函数:map(const map &mp);
//拷贝构造函数赋值:
map& operator=(const map &mp);
//重载等号操作符#include
using namespace std;
#include
void printMap(map<int,int>&m)
{
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key = " << it->first << "value =" << it->second << endl;
}
cout << endl;
}
void test()
{
map<int, int>m;//默认构造
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(7, 50));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
printMap(m);
//拷贝构造
map<int, int>m1(m);
printMap(m1);
//赋值
map<int, int>m2;
m2 = m;
printMap(m2);
}
int main()
{
test();
system("pause");
return 0;
}
总结:map中所有元素都是成对出现,插入数据时候要使用对组
功能描述:
函数原型:
size();
//返回容器中元素的数目empty();
//判断容器是否为空swap(st);
//交换两个集合容器#include
using namespace std;
#include
void printMap(map<int,int>&m)
{
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key = " << it->first << "value =" << it->second << endl;
}
cout << endl;
}
void test01()
{
map<int, int>m;//默认构造
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(7, 50));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(4, 40));
if (m.empty())
{
cout << "m为空!" << endl;
}
else
{
cout << "m不为空,且大小为:" << m.size() << endl;
}
}
void test02()
{
//交换
map<int, int>m1;
m1.insert(pair<int, int>(1, 10));
m1.insert(make_pair(2, 20));
m1.insert(pair<int, int>(3, 30));
map<int, int>m2;
m2.insert(make_pair(4, 40));
m2.insert(make_pair(5, 50));
cout << "交换前:" << endl;
printMap(m1);
printMap(m2);
cout << "交换后:" << endl;
m1.swap(m2);
printMap(m1);
printMap(m2);
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
总结:
- 统计大小 — size
- 判断是否为空 — empty
- 交换容器 — swap
功能描述:
函数原型:
insert(elem);
//在容器中插入元素。clear();
//清除所有元素erase(pos);
//删除pos迭代器所指的元素,返回下一个元素的迭代器。erase(beg, end);
//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。erase(key);
//删除容器中值为key的元素。#include
using namespace std;
#include
void printMap(map<int,int>&m)
{
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key = " << it->first << "value =" << it->second << endl;
}
cout << endl;
}
void test01()
{
map<int, int>m;//插入的3种方式
m.insert(pair<int, int>(1, 10));
m.insert(make_pair(7, 50));
m.insert(map<int,int>::value_type(3,30));
m[5] = 50;
printMap(m);
m.erase(m.begin());
printMap(m);
m.erase(5);///擦除key为5的那个。
printMap(m);
m.erase(m.begin(), m.end());
printMap(m);
m.clear();
printMap(m);
}
int main()
{
test01();
system("pause");
return 0;
}
总结:
- map插入方式很多,记住其一即可
- 插入 — insert
- 删除 — erase
- 清空 — clear
功能描述:
函数原型:
find(key);
//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();count(key);
//统计key的元素个数, 只可以是0或者1#include
using namespace std;
#include
void printMap(map<int,int>&m)
{
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key = " << it->first << "value =" << it->second << endl;
}
cout << endl;
}
void test01()
{
map<int, int>m;//插入的3种方式
m.insert(pair<int, int>(1, 10));
m.insert(make_pair(7, 50));
m.insert(map<int,int>::value_type(3,30));
m[5] = 50;
printMap(m);
//统计
map<int, int>::iterator pos = m.find(7);
if (pos != m.end())
{
cout << "找到了元素,key= " << (*pos).first << "value =" << (*pos).second << endl;
}
else {
cout << "未找到元素!" << endl;
}
//查找
int num = m.count(5);
cout<< "num = " << num << endl;
}
void test02()
{
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
总结:
- 查找 — find (返回的是迭代器)
- 统计 — count (对于map,结果为0或者1)
学习目标:
主要技术点:
#include
using namespace std;
#include
class Compare
{
public:
bool operator()(int a, int b)const
{
return a > b;
}
};
void test01()
{
map<int, int,Compare>m;//插入的3种方式
m.insert(pair<int, int>(1, 10));
m.insert(make_pair(7, 50));
m.insert(map<int,int>::value_type(3,30));
for (map<int, int, Compare>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key是" << it->first << "value是" << it->second << endl;
}
cout << endl;
}
void test02()
{
}
int main()
{
test01();
test02();
system("pause");
return 0;
}
总结:
- 利用仿函数可以指定map容器的排序规则
- 对于自定义数据类型,map必须要指定排序规则,同set容器
终于学完啦map!!!!!!!!!!!!!
可以开始复习考试了!
打个小广告,欢迎关注我的公众号“麦香E站”,分享人工智能,信通学习,数学提高,外语学习,生活理财等多方面知识以及我多年积累的学习资源分享~
公众号后台回复 “编程” 获取我多年来积攒的海量编程电子书~
后台回复“latex”获取我倾力所作latex快速入门手册~