map中所有的元素都是pair。
pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
所有元素会根据键值自动排序(从小到大)
map/multimap属于关联式容器,底层结构是用二叉树实现的。
优点:可以根据key值快速找到value值。
map和multimap区别(和set容器相似):map不允许有重复的key值元素,而multimap可以 。
pair对组的创建
成对出现的数据,利用对组可以返回两个数据
两种创建方式
void test01()
{
pair<int, int>p(1, 2);
cout << p.first << endl;//1
cout << p.second << endl;//2
pair<int, int>p2 = make_pair(1, 2);
cout << p2.first << endl;//1
cout << p2.second << endl;//2
if (p == p2)
cout << "p==p2" << endl;//p==p2
else
cout << "p!=p2" << endl;
}
两个对组相等key和value均相等。
map的构造和赋值
void print(const map<int, int>& m)
{
for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
}
void test02()
{
map<int, int>m1;
m1.insert(pair<int,int>(1, 2));//插入对组
m1.insert(pair<int, int>(3, 36));
m1.insert(pair<int, int>(5, 5));
m1.insert(pair<int, int>(9, 7));
m1.insert(pair<int, int>(10, 3));
print(m1);
/*1 2
3 36
5 5
9 7
10 3*/
map<int, int>m2(m1);//拷贝构造
print(m2);
map<int, int>m3;
m3 = m2;//重载等号
}
map容器大小和交换map容器
void test03()
{
map<int, int>m1;
m1.insert(pair<int, int>(1, 2));
m1.insert(pair<int, int>(3, 36));
m1.insert(pair<int, int>(5, 5));
m1.insert(pair<int, int>(9, 7));
m1.insert(pair<int, int>(10, 3));
if (m1.empty())
cout << "容器为空" << endl;
else
cout << "容器中的元素个数" << m1.size() << endl;//容器中的元素个数5
}
swap()内置函数交换两个容器。
map插入和删除
void test04()
{
map<int, int>m1;
m1.insert(pair<int, int>(1, 2));
m1.insert(pair<int, int>(3, 36));
m1.insert(pair<int, int>(5, 5));
m1.insert(pair<int, int>(9, 7));
m1.insert(pair<int, int>(10, 3));
print(m1);
map<int, int>::iterator it = m1.begin();
m1.erase(it);//删去迭代器所指的元素,重载类型erase(beg,end),删除[beg,end]迭代器区间的元素,返回下一个元素的迭代器
print(m1);
m1.clear();//清空容器
cout << "容器内的元素个数为:" << m1.size() << endl;
}
map查找和统计:
void test05()
{
map<int, int>m1;
m1.insert(pair<int, int>(1, 2));
m1.insert(pair<int, int>(3, 36));
m1.insert(pair<int, int>(5, 5));
m1.insert(pair<int, int>(9, 7));
m1.insert(pair<int, int>(10, 3));
map<int, int>::iterator it = m1.find(5);
if (it != m1.end())
cout << it->second << endl;//5
else
cout << "未查找到此元素" << endl;
}
count(key)统计key的元素个数,map中为1或0,multimap可以为多个。