StarCore SC100嵌入式开发:链接器覆盖技术原理与工程实践详解
2026/6/18 20:08:12
#include<map>// 包含map和multimap#include<iostream>#include<string>// map的创建map<int,string>studentMap;map<string,int>scoreMap={{"Alice",95},{"Bob",87}};// multimap的创建multimap<int,string>groupMap;multimap<string,int>scoreMultiMap;| 操作 | map | multimap |
|---|---|---|
| 插入键值对 | insert()或operator[] | insert() |
| 查找键 | find()返回一个迭代器 | find()返回第一个匹配的迭代器 |
| 计数 | count()返回0或1 | count()返回键出现的次数 |
| 删除 | erase(key)删除所有该键 | erase(key)删除所有该键 |
| 访问元素 | operator[]可直接访问 | 不能使用operator[] |
#include<iostream>#include<map>#include<string>usingnamespacestd;intmain(){// 创建mapmap<string,int>ageMap;// 插入元素 - 三种方法ageMap.insert({"Alice",20});// 方法1ageMap.insert(make_pair("Bob",22));// 方法2ageMap["Charlie"]=19;// 方法3// 访问元素cout<<"Alice's age: "<<ageMap["Alice"]<<endl;cout<<"Bob's age: "<<ageMap.at("Bob")<<endl;// 查找元素autoit=ageMap.find("Charlie");if(it!=ageMap.end()){cout<<"Found: "<<it->first<<" -> "<<it->second<<endl;}// 遍历mapcout<<"\nAll elements:"<<endl;for(constauto&pair:ageMap){cout<<pair.first<<": "<<pair.second<<endl;}// 使用迭代器遍历cout<<"\nUsing iterator:"<<endl;for(autoit=ageMap.begin();it!=ageMap.end();++it){cout<<it->first<<": "<<it->second<<endl;}// 删除元素ageMap.erase("Bob");// 检查大小cout<<"\nSize after erase: "<<ageMap.size()<<endl;return0;}#include<iostream>#include<map>#include<string>usingnamespacestd;intmain(){// 创建multimapmultimap<string,string>phonebook;// 插入元素 - 允许重复键phonebook.insert({"Alice","123-4567"});phonebook.insert({"Alice","987-6543"});// 同一个人的第二个电话phonebook.insert({"Bob","555-1234"});phonebook.insert({"Alice","111-2222"});// 同一个人的第三个电话// 统计键出现的次数cout<<"Alice has "<<phonebook.count("Alice")<<" phone numbers"<<endl;// 查找所有匹配的键 - 重要!cout<<"\nAll of Alice's phone numbers:"<<endl;autorange=phonebook.equal_range("Alice");for(autoit=range.first;it!=range.second;++it){cout<<it->first<<": "<<it->second<<endl;}// 遍历所有元素cout<<"\nAll entries:"<<endl;for(constauto&entry:phonebook){cout<<entry.first<<": "<<entry.second<<endl;}// 删除特定键的所有值intremoved=phonebook.erase("Alice");cout<<"\nRemoved "<<removed<<" entries for Alice"<<endl;return0;}// 统计数组中每个数字出现的次数vector<int>nums={1,2,3,2,1,3,3,4,2};map<int,int>freq;for(intnum:nums){freq[num]++;// 如果键不存在会自动创建,值为0}for(constauto&p:freq){cout<<p.first<<": "<<p.second<<" times"<<endl;}// 常用于图论题目中,将字符串节点名映射为数字IDmap<string,int>m;intidCounter=0;vector<string>names={"Beijing","Shanghai","Guangzhou","Shenzhen"};for(constauto&name:names){if(m.find(name)==m.end()){m[name]=idCounter++;}}// 现在可以用数字ID代替字符串进行操作// map自动按键排序,可以利用这个特性map<int,string>m;m[3]="Three";m[1]="One";m[2]="Two";// 遍历时自动按key升序排列for(constauto&p:m){cout<<p.first<<": "<<p.second<<endl;}// 输出:// 1: One// 2: Two// 3: Three// 学生选课系统:一个老师可以教多个课程multimap<string,string>m;m.insert({"Wang","Math"});m.insert({"Wang","Physics"});m.insert({"Li","Chemistry"});m.insert({"Li","Biology"});m.insert({"Wang","Computer Science"});// 查询Wang老师的所有课程cout<<"Wang's courses:"<<endl;autorange=m.equal_range("Wang");for(autoit=range.first;it!=range.second;++it){cout<<"- "<<it->second<<endl;}// 降序排列的mapstructCompareDesc{booloperator()(constint&a,constint&b)const{returna>b;// 降序}};map<int,string,CompareDesc>descMap;descMap[1]="One";descMap[2]="Two";descMap[3]="Three";for(constauto&p:descMap){cout<<p.first<<": "<<p.second<<endl;}// 输出:// 3: Three// 2: Two// 1: One// 使用pair作为键map<pair<int,int>,string>gridMap;gridMap[{1,2}]="Position (1,2)";gridMap[{3,4}]="Position (3,4)";// 查找autopos=make_pair(1,2);if(gridMap.find(pos)!=gridMap.end()){cout<<gridMap[pos]<<endl;}时间复杂度:
空间复杂度:O(n)
适用场景:
不适用场景:
operator[],适合一对一映射operator[],适合一对多关系掌握map和multimap是C++竞赛编程的重要基础,熟练使用它们能帮助你更高效地解决各种问题。
各种学习资料,助力大家一站式学习和提升!!!
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转
2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转
3、csp信奥赛冲刺一等奖有效刷题题解:
CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
4、GESP C++考级真题题解:
GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转
GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}