标签:问题 F12 初始 变量 比较 莫名其妙 span 重定义 内部数据
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入门了吧。
(至少不像以前那样只记得有什么函数,使用起来一脸懵的样子了)
标签:问题 F12 初始 变量 比较 莫名其妙 span 重定义 内部数据
原文地址:https://www.cnblogs.com/AppleC/p/11728979.html