map为类似链表的,对应结构
#include<map>//头文件
using namespace std;//打开标准命名空间
map:映射表:键值,实值,map中的每一个元素,称之为pair,键值对
键值唯一,不能重复, 可以根据键值自动排序(默认升序)
map的定义方式: map<int, char>m;
添加键值对
m.insert(pair<int, char>(1, 'a'));
m.insert(pair<int, char>(3, 'b'));
m.insert(pair<int, char>(4, 'c'));
m.insert(pair<int, char>(2, 'd'));
m[0] = 'g';
遍历方式:迭代器遍历||增强for
#include<iostream>
#include<map>//头文件
using namespace std;//打开标准命名空间
//map:映射表:键值,实值,map中的每一个元素,称之为pair,键值对
//键值唯一,不能重复, 可以根据键值自动排序(默认升序)
int main() {
map<int, char>m;
//向map中添加键值对
m.insert(pair<int, char>(1, 'a'));
m.insert(pair<int, char>(3, 'b'));
m.insert(pair<int, char>(4, 'c'));
m.insert(pair<int, char>(2, 'd'));
//遍历map
//1--迭代器遍历
//注意:int *p p->show()==(*p).show()
map<int, char>::iterator ite = m.begin();
while(ite!=m.end()) {
//first取键值(key),second取实值(value)
cout << (*ite).first<<" "<<ite->second<< endl;// 1-a 2-d 3-b 4-c
ite++;
}
cout << endl;
//添加键值对方法2
//m[键值(key)=实值(value)]
m[0] = 'g';
ite = m.begin();
while (ite != m.end()) {
//first取键值(key),second取实值(value)
cout << (*ite).first << " " << ite->second << endl;//0-g 1-a 2-d 3-b 4-c
ite++;
}
cout << endl;
m[0] = 'h';//如果键值存在会修改实值
for (pair<int,char>pr:m) {
cout << pr.first << " " << pr.second << endl;//0-h 1-a 2-d 3-b 4-c
}
//删除第二个元素
ite = ++m.begin();
ite=m.erase(ite);
for (pair<int, char>pr : m) {
cout << pr.first << " " << pr.second << endl;//0-h 2-d 3-b 4-c
}
cout << ite->first << " " << ite->second << endl;//2-d
//指定键值删除————注意同链表一样尾端并不是最后一个元素而是假想的一个end 0-h 2-d 3-b 4-c end
// 头 尾
ite=m.find(3);
if (ite != m.end()) {//找到了
ite = m.erase(ite);
}
for (pair<int, char>pr : m) {
cout << pr.first << " " << pr.second << endl;//0-h 2-d 4-c
}
cout << ite->first << " " << ite->second << endl;//4-c
cout << m.count(2) << "" << m.count(8) << endl;//1 0 count表示该键值是否存在
return 0;
}