Loading

「学习笔记」set、map、auto

快 NOIP 了,最近的考试中用到了很多 STL其实也就今天的考试用到了,其中 setmap 以及简单的指针的使用也慢慢熟悉了

map

对于 Hash 来说,这是个好东西,但是它也不能完全代替掉 Hash,因为它的操作是带 \(\log\) 的,其次,它也会对元素进行排序

定义

map<string, int> mp;

插入

mp["IOI AK ME"] = 1;

这就是最常用的,此外他还有 erase()upper_bound()lower_bound()count()find()empty()size() 等函数,其中 find() 函数就是判断该元素是否出现过,empty() 判断是否为空,size() 返回容器大小,count(x) 返回元素个数

set

set 是关联容器,内部通常采用红黑树实现,非常适合处理需要同时兼顾查找、插入与删除的情况。和数学中的集合相似,set 中不会出现值相同的元素。

操作

insert(x): 当容器中没有等价元素的时候,将元素 \(x\) 插入到 set 中。
erase(x): 删除值为 \(x\) 的所有元素,返回删除元素的个数。
erase(pos): 删除迭代器为 \(pos\) 的元素,要求迭代器必须合法。
erase(first,last): 删除迭代器在 \([first - last)\) 范围内的所有元素。
clear(): 清空 set
count(x): 返回 set 内键为 \(x\) 的元素数量。
find(x): 在 set 内存在键为 \(x\) 的元素时会返回该元素的迭代器,否则返回 end()
lower_bound(x): 返回指向首个不小于给定键的元素的迭代器。如果不存在这样的元素,返回 end()
upper_bound(x): 返回指向首个大于给定键的元素的迭代器。如果不存在这样的元素,返回 end()
empty(): 返回容器是否为空。
size(): 返回容器内元素个数。

auto

这是一个便利的迭代器定义,但可惜只能在 C++ 14 及更新的版本中用,速度更慢,但可以充当各种各样的迭代器。
对于 pair 定义的元素(就拿 vector 为例),可以这样用:

vector<pair<int, int> > son
for (auto [it, i] : son) {
	cout << it << endl;
}
posted @ 2022-11-03 16:32  yi_fan0305  阅读(74)  评论(1编辑  收藏  举报