关于STL map的使用
知识补充
首先,补充一下pair类型的访问,使用first,second。
pair<int, double> p1; //使用默认构造函数
p1.first = 1;
p1.second = 2.5;
cout << p1.first << ' ' << p1.second << endl;
map声明
map<int, int> mymap;
map插入
两种比较方便的办法
mymap.insert(pair<int, int> (1,2));
mymap[1] = 2;
注意value的值会覆盖
mymap[1] = 3; //现在key=1的value值是3
map遍历
map<int, int>::iterator iter;
for(iter=mmap2.begin(); iter!=mmap2.end(); iter++)
{
cout << iter->first <<" " << iter->second << endl;
}
map快速查询
也是有方式,一种根据迭代器
iter = mmap2.find(100);
if(iter==mmap2.end())
{
cout << "no" << endl;
}
一种根据数组访问
cout << mymap[100] << endl; //若key不存在,返回0
map修改
拿到访问之后,直接修改
mymap[1] = 2; //修改key=1的value为2
map删除
有两种方式,一种是迭代器删除,一种是关键字删除
//迭代器刪除
iter = mmap2.find("123");
mmap2.erase(iter);
如果刪除了會返回1,否則返回0
//关键字删除
int n = mmap2.erase("r123");
map清空
mmap2.erase(mmap2.begin(), mmap2.end());
map排序
针对key排序
插入的时候,默认按照key升序排序。
想要变成降序排序排序(目前还是针对key),在声明的地方改成:
map<int, int, greater<int> > mmap2;
//默认是less<int>
当然啦,可以自己写一个自定义的排序函数,然后将函数名作为第三个参数传入。
针对value排序
这是比较麻烦的,需要写好自定义排序函数,还需要将map的内容转到vector中。
//自定义排序函数
bool cmp(pair<int,int> a, pair<int,int> b)
{
return a.second > b.second;
}
int main()
{
mmap2.insert(pair<int, int> (1,2));
mmap2.insert(pair<int, int> (3,4));
mmap2.insert(pair<int, int> (5,6));
vector<pair<int, int> > vec1(mmap2.begin(), mmap2.end()); //转到vector中
sort(vec1.begin(), vec1.end(), cmp);
for(int i=0; i<vec1.size(); i++)
{
cout << vec1[i].first << " " << vec1[i].second << endl;
}
return 0;
}
当key是结构体或者是类的时候
记得为结构体或者类写排序函数,否则map不知道如何排序
其余的,访问等操作均相同。