c++标准模板库-map的常见用法

    科技2022-08-16  105

    map

    map

    1.map 中元素有序无重复 2.map是关联容器 关联容器与顺序容器的区别 (1)关联容器:元素是按照关键字来保存和访问 (2)顺序容器:元素是按照在容器中的位置保存和访问 3.map在底层通常用二叉搜索树实现 4.map的本质是映射,键值对一一对应

    map的常见用法

    一.map的初始化 1.默认构造

    map<key,value> mp;

    映射前的类型键key,映射后的类型值value (1)整型到整型的映射

    map<int,int> mp;

    (2)字符串到整型的映射,必须使用string而不能使用char.若是字符可以用char

    map<string,int> mp;

    (3)key和value也可以是STL容器,eg:将一个vector容器映射到一个字符串;

    map<vector,string> mp;

    2.范围构造

    map<key, value> m(iterator first, iterator last);

    将迭代器[frist, last)范围内的元素填入map中

    3.拷贝构造

    map<key, value> m(cosnt map& m);

    用m构造map

    二.访问 1.以键访问值

    map<char,int> mp; mp[‘c’]=520; mp[‘c’]=521; //520会被覆盖

    2.以迭代器访问

    map<key,value>::iterator it;

    it->first访问键,it->second访问值

    map<char,int> mp; mp[‘a’]=10; mp[‘b’]=20; mp[‘c’]=30; map<char,int>::iterator it; for(it=mp.begin();it!=mp.end();it++) { cout<< it->first<<" "<< it->second; }

    3.反向迭代器

    map<char,int> ::reverse_iterator Itr; Itr = mp.rbegin(); While(Itr != mp.rend()) { Itr++; }

    三.查找 1.find(key)

    返回一个迭代器: 若key存在,则返回key所在位置的迭代器 若key不存在,则返回mp.end()

    #include < map> #include < iostream> using namespace std; int main(){ map<int,int> grade; grade[1] = 100; grade[2] =99; grade[3] = 98; map<int, int>::iterator it=grade.find(1); if(it!= grade.end()){ cout<<"Found, the value is "<< it->second<<endl; } return 0; }

    2.count函数 用来判断关键字是否出现,但无法定位数据出现的位置。返回值0或1,当要判断的key出现,返回1

    四.插入 1.mp[key]=value;

    mp[‘a’]=10;

    可以覆盖以前该关键字对应的值

    2.insert函数

    mp.insert(pair<int , string>(22 ,“zhang zan”)); mp.insert(make_pair<int , string>(22 ,“zhang zan”));

    (1)Insert不能覆盖,如果键已经存在,则插入失败 (2)make_pair函数,由传递给它的两个实参生成一个新的pair对象,所以如果键已经存在,则会更新键对应的值。

    用pair来获得insert执行后是否插入成功

    map<int, string> mapStudent; pair<map<int, string>::iterator, bool> Insert_Pair; Insert_Pair = mapStudent.insert(pair<int, string>(1, “student_one”)); If(Insert_Pair.second == true) { cout<<” Successfully”<<endl; } else { cout<<” Failure”<<endl; }

    五.删除 1.移除迭代器it所指向的元素

    erase(it);

    map<int, int>::iterator it=grade.begin(); for(it;it!=grade.end();it++) { if((*it).second==99) { grade.erase(it); } }

    2.移除迭代器范围为[0,5)的元素序列

    erase(it,it+5);

    3.移除key和对应value,然后返回所移除元素的个数。 只能返回0或1,若返回0,则表明元素不在容器中;

    六.判断两个map中键值是否相等 1.已知两个map中键相等,如何判断其值是否相等

    bool judge(map<string,int> &left,map<string,int> &right) { map<string,int>::iterator it; for(it=left.begin();it!=left.end();it++) { if(right[it->first]!=it->second) { return false; } } return true; }

    七.其他 mp.size() 返回元素数目 mp.empty() 判断是否为空 mp.clear() 清空所有元素

    Processed: 0.032, SQL: 9