了解Map容器之前,我们先来了解一下这个pari对组的使用
pair对组
成对出现的数据,对组可以存取两个元素
pair<int, bool> p(10, true);//创建了一个对组,要写出你要存的这对数据的数据类型
//括号里面的是这个对组的初始化
cout << p.first << endl << p.second << endl;//通过这个方式来取出对组中的数
//第二种方式创建对组
pair<int, bool> p1 = make_pair(20, false);
//pair数组
typedef pair<int, int> P;//取个别名
P pr[N];
主要的是:pair容器不会对key值进行排序,如果需要对pair进行排序可以用sort,map容器才会对key进行排序
map容器中所有元素都是pair,pair中的第一个元素起到了索引(key)的作用,第二个元素是数据
所有元素都会根据元素的key值进行排序
map(不允许重复元素) 和 multimap(允许)
1、map 容器的构造和赋值
void print(map<string, int> m) {
for (map<string, int>::iterator it = m.begin(); it != m.end(); it++) {
cout << (*it).first << " " << it->second;
cout << endl;
}
}
void test01() {
//创建容器
map<string, int> m;
m.insert(pair<string,int>("1",10));//map元素的插入需要pair进行操作,那样子map里面就装的是pair
m.insert(pair<string,int>("3",400));
m.insert(pair<string,int>("2",50));
print(m);
//拷贝构造
map<string, int> m1(m);
print(m1);
//等号赋值
map<string, int> m2 = m;
print(m2);
}
2、map的大小和交换
m.size(); m.empty(); m.swap(m1);
3、插入与删除
//第一种插入
m.insert(pair<string,int>("a",100));
//第二种插入
m.insert(make_pair("5", 50));
//第三种插入
m.insert(map<string, int>::value_type("v", 12));
//删除,第一种迭代器删除
m.erase(m.begin());
//第二种,按照key值进行删除
m.erase("5");//删除key值为5的对组
4、查找和统计
m.fine(key);//只能按照key值进行查找,返回的是迭代器,没找到,返回最后的迭代器
m.count(key);//统计key值出现了几次
5、排序
利用仿函数进行排序,只能对key值进行排序
或者我们可以把我们想要的数据存进key值里面,如何索引存在第二个
class cmp {//仿函数
public:
bool operator() (const string &p1,const string &p2) const {
return p1 > p2;
}
};
void print(map<string, int,cmp> m) {
for (map<string, int,cmp>::iterator it = m.begin(); it != m.end(); it++) {
cout << (*it).first << " " << it->second;
cout << endl;
}
}
void test01() {
//创建容器
map<string, int,cmp> m;//map函数只能对key值进行排序,无法对数进行排序
//如果需要对数进行排序,需要把map里面的数拿出来,用vector装,如何排序
m.insert(pair<string,int>("1",10));
m.insert(pair<string,int>("3",400));
m.insert(pair<string,int>("2",50));
print(m);
}