map
1.map
这么几个容器看下来, 可以发现, 他们其实大同小异.
🌊map是什么呢
我们要认识 map
, 首先要认识 pair
Defined in header <utility>
template<
class T1,
class T2
> struct pair;
创建和访问(英文中两个都叫value)
pair<string,int> p0("witcher",3);
cout<<"p0 = "<<p0.first<<p0.second<<endl;;
交换pair中的元素
pair<string,int> p1("cyberpunk",1);
p0.swap(p1);
cout<<"p0 = "<<p0.first<<p0.second<<endl;
拷贝构造(略)
2023-06-01 16:02:12 星期四
下面的代码, 实际上是创造了一个名叫make_pair的pair
auto p = std::make_pair(1, 3.14);
std::cout << '(' << std::get<0>(p) << ", " << std::get<1>(p) << ")\n";
std::cout << '(' << std::get<int>(p) << ", " << std::get<double>(p) << ")\n";
结果
至此, 我们认识了pair.
那么 map 又是什么呢? map是通过红黑树储存pair的容器.
🌊contain和count的区别在哪?
contain是检查容器内是否有这个元素, 有就返回true, 没有返回false; count是统计容器中出现某元素的次数, 返回int.
🌊map的键值是什么?
看看这个例子:
map<string,int> name;
name["小明"] = 80;
小明是键盘,80是值. 小明这次考了80分, 小华这次也能考80分. 小明下次还可能考90分,但是一次考试不能出现两个小明, 一个80分, 一个90分.
比如, 这样写就达不到更新键值对的目的(我们不能创造两个小明)
name.emplace("小明",90);
这个比较坑人的一点是, 编译器也不会报错, 但是这个pair是没有插入的, 相当于什么都没做.
要更新值,可以这样写(小明发现改卷改错了, 少给他加了10分)
name["小明"] = 90;
总结: 键唯一, 值不唯一;
🌊unordered_map跟map又有什么区别?
map的底层是红黑树, 插入元素后是自动排序的;unordered_map没有这个自动排序.
🌊说说find的用法.
首先我们明确一下, find 的东西是键, find 到了就返回这个键所对应的键值对.
auto search = window.find('A');
cout<<"search = "<<search->first<<" "<<search->second;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!