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";

结果

image

至此, 我们认识了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;
posted @ 2023-06-01 16:00  无形深空  阅读(50)  评论(0编辑  收藏  举报