c++STL系列之Map
开头总结:
C++中STL的概念总结:
1、容器
2、迭代器
STL中所有的不同库都是容器的概念体现,基本操作都是基于迭代器的操作。
一、Map初级用法:
//声明 map<int,string> m;//无参声明 map<int,string> m1 = { {1,"one"}, {2,"two"}, {3,"three"}, }; //基本功能 m.empty();//判空操作 m1.size();//map的大小 m1.at(1);//得到key对应的value,等价于m1[1]; m1.clear();//清空map
//map打印
for (map<int,string>::iterator it=m1.begin();it!=m1.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;
}
二、Map高级用法:
map和set的插入删除效率比用其他序列容器高?因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。
map和set都有自己的count函数和find函数,可以直接调用。找不到时,指针指向map.end()。
m1.insert(make_pair(4,"asf"));//插入 m1.erase(4);//删除key为4对应的value m1.insert(make_pair(4,"asf")); map<int,string>::iterator key = m1.find(4);//查找、若找到则删除 m1.erase(key);//迭代器删除 m1.count(1);//统计key=1的次数
map根据value排序
vector< pair<int,int> > vec(m.begin(),m.end()); sort(vec.begin(), vec.end(),[](const pair<int,int> &p1, const pair<int,int> &p2) { return p1.second > p2.second; });