#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<char, int>ma;//定义map 左key右值
map<char, int>::iterator it;//迭代器
map<char, int>::reverse_iterator rit;//反向迭代器
ma.insert(make_pair('a', 1));//写入方式1
ma.insert(pair<char, int>('b', 2));//写入方式2
ma['c'] = 3;//写入方式3
ma.size();//返回元素的个数
//swap(m1,m2);//交换两个map
it = ma.lower_bound(1); //返回键值 >= 给定元素的第一个位置
it = ma.upper_bound(1); //返回键值 > 给定元素的第一个位置
it = ma.find('b');
cout << it->second << endl;//输出b所代表的值
cout << ma['a'] << endl;//可以这样输出 a所代表的值
ma.erase(it);//删除it所代表的这个pair('b',2);
for (it = ma.begin(); it != ma.end(); it++)
{
cout << it->second << " " << it->first << endl;
}
cout << endl << endl;
for (rit = ma.rbegin(); rit != ma.rend(); rit++)
{
cout << rit->second << " " << rit->first << endl;
}
ma.clear();//清除
ma.empty();//判断是否为空
ma['c'] = 2;
bool have = ma.count('c');//返回指定元素是否出现 0/1
//搭配更多pair更香哦 map<pair<int,int>,int>m , map<int,pair<int,int> >m;
///
//多重存键值的multimap 不支持下标运算符
multimap<string, int> m_map;
string s("中国");
string s1("美国");
m_map.insert(make_pair(s, 50));
m_map.insert(make_pair(s, 55));
m_map.insert(make_pair(s, 60));
m_map.insert(make_pair(s1, 30));
m_map.insert(make_pair(s1, 20));
m_map.insert(make_pair(s1, 10));
multimap<string, int>::iterator m;
multimap<string, int>::iterator beg, end;
//方式1 multimap 的成员函数 find() 可以返回一个键和参数匹配的元素的迭代器。例如:
m = m_map.find(s);
for (int k = 0; k != m_map.count(s); k++, m++)
cout << m->first << "--" << m->second << endl;
//方式2
//lower_bound() 会返回一个迭代器,它指向键值和参数相等或大于参数的第一个元素,或者指向结束迭代器。
//upper_bound() 也返回一个迭代器,它指向键值大于函数参数的第一个元素,如果这样的元素不出现的话,它就是一个结束迭代器。
beg = m_map.lower_bound(s1);//>=
end = m_map.upper_bound(s1);//>
for (m = beg; m != end; m++)
cout << m->first << "--" << m->second << endl;
//方式3 我们想访问给定键对应的所有元素。成员函数 equal_range()就可以做到这一点
beg = m_map.equal_range(s).first;
end = m_map.equal_range(s).second;
for (m = beg; m != end; m++)
cout << m->first << "--" << m->second << endl;
return 0;
}