set小记

Posted applec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了set小记相关的知识,希望对你有一定的参考价值。

2019.10.23

想用vector做CF1249D的,

结果TLE了,原因是insert()函数是O(n)插入的;

听说大佬们都是用的set,可我还不会,

于是我就打算用set做这道题,并从中学习set及迭代器的用法。

 

磨了一上午代码终于打完了,结果测样例就WA了,还错的莫名其妙。

然后调了一整天代码终于发现问题了:

我在结构体重定义‘<‘的时候只比较了其中一个变量的大小,

因为对于该问题其它变量的大小是无关紧要的。

但是set判断两个元素是否相同是通过比较大小来完成的,

我定义的‘<‘只比较了结构体中一个变量的大小,

因此只要这个变量相同,set即判定为相同元素,

由于set会去重,就把其它该变量相等的元素删掉了,

导致本来不同的结构体没有被放进集合,就出问题了。

 

另外在调试过程中还发现了set.end()返回的是一个计数的元素,

储存的是set.size()即set中元素的数量,

如果是一个结构体则把size存在第一个变量里面,

其它变量初始化为0(Windows中是这样,Linux就不知道了)。

 

最后吐槽一句:STL调试真难受啊,内部数据一个都看不了,

iterator迭代器都不知道下一个往哪跳,找问题还要大脑模拟计算过程。

好在这一下午的功夫没白费,还是学到了不少的。(终于真正会用迭代器了)

 

晚上写下这个小记进一步加深印象,算是set入门了吧。

(至少不像以前那样只记得有什么函数,使用起来一脸懵的样子了)

 

以上是关于set小记的主要内容,如果未能解决你的问题,请参考以下文章

Android 7.0 Settings Summary 小记

java web开发小记

mybatis开启二级缓存小记

多线程小记,线程控制并发

小记:iterator && auto

HiveQL collect_list保持顺序小记