首页 > 其他 > 详细

set小记

时间:2019-10-23 22:39:28      阅读:94      评论:0      收藏:0      [点我收藏+]

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小记

原文:https://www.cnblogs.com/AppleC/p/11728979.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!