#include<iostream>
using namespace std;
#include<map>
/*
map中所有元素都是pair
pair中第一个元素为key键值,起到索引作用,第二个元素value实值
所有元素会根据元素的键值自动排序
本质:
属于关联式容器,底层结构是二叉树
优点:
可以根据key值快速找到value值
map不可以有重复的key值,但可以有value
multimap 可以有重复的key值,
构造函数原型:
mapmp; map默认构造函数
map(const map&mp)拷贝构造函数
赋值:
map& operator=(const map& mp)重载=操作符
map大小和交换
函数原型:
size() 返回容器中元素的数目
empty() 判断容器是否为空
swap(st)交换两个集合的容器
插入和删除:
insert(elem); 在容器中插入元素
clear(); 清除所有元素
erase(pos) 删除pos迭代器所指的元素,返回下一个元素的迭代器
erase(beg,end)删除区间beg end所有元素,返回下一个元素的迭代器
erase(key) 删除容器中为key值的元素
查找和统计:
对map数据进行查找数据与统计数据
函数原型:
find(key); 查找key是否存在。存在返回该键的元素迭代器,用迭代器接收,不存在返回set.end();
cout(key); 统计key的元素个数,返回一个数
map容器的排序:
自定义排序
*/
void printmap(map& m)
{
for (map::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " " << it->second <<endl;
}
cout << endl;
}
void test01()
{
mapm;
//第一种
m.insert(pair(1, 10));
m.insert(pair(2, 20));
m.insert(pair(3, 30));
//第二种
m.insert(make_pair(4, 10));
//第三种
m.insert(map::value_type(5, 60));
//第四种
m[6] = 70;
printmap(m);
//mapm1;
//m1 = m; //重载=赋值
//printmap(m1);
//mapm2(m); //拷贝构造
//printmap(m2);
map<int, int>m1;
m1.insert(pair<int, int>(10, 100));
m1.insert(pair<int, int>(20, 200));
m1.insert(pair<int, int>(30, 300));
printmap(m1);
m1.erase(m1.begin());
m1.erase(20);//是按照key值删除,不能按照values值删除
m1.erase(m1.begin(), m1.end());
//m.swap(m1);
printmap(m);
//printmap(m1);
map<int,int>::iterator itt= m.find(3);
cout << itt->first << endl << itt->second << endl;
int num=m.count(3);
cout << num << endl;
//对于map而言cout结果要么为0,要么为1
}
class person
{
public:
person(int age,string name)
{
this->age = age;
this->name = name;
}
public:
int age;
string name;
};
class com
{
public:
//按年龄
bool operator()(const person& p1,const person& p2)const
{
return p1.age > p2.age;
}
};
void test02()
{
//moren从小到大排序
mapm;
person p1( 10,"xioajiejie");
person p2(20, "xioajie");
person p3(60, "xioa");
m.insert(make_pair(p1,110));
m.insert(make_pair(p2,120));
m.insert(make_pair(p3, 110));
for (map::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first.age << " " << it->first.name<second <<endl ;
}
cout << endl;
}
int main()
{
//test01();
test02();
system("pause");
return 0;
}