stl prior_queue 插入bug

最近在使用prior_queue实现图的Dijkstra算法和Prim,发现老是插入有bug,仔细研习之后突然发现有两点需要注意

1.如果优先队列里放的是自定义的类,在用重载比较符的时候要严格定义:

if (a<b) is true

then ( a==b ) is false;

2.如果在不插入或者删除队列中节点的时候,却要修改某个节点中key的值,切记不可以直接修改其 key

解决方案1:全部出队,修改key,全部进队

解决方案2:把要修改key的节点和其前面所有节点出队,然后修改key,然后在全部进队

时间: 2025-01-31 07:01:45

stl prior_queue 插入bug的相关文章

VS、GNU STL存在一个Bug,而STLport-5.2.1则是没有的。

最后来到比较坑的代码中: SGI: istream_iterator(istream_type& _Istr) : _Myistr(&_Istr) { // construct with input stream _Getval(); } SGI PORT: istream_iterator(istream_type& _Istr) : _Myistr(&_Istr) { // construct with input stream _Getval(); } istream

仿小米便签图文混排 EditText解决尾部插入文字bug

一直想实现像小米便签那样的图文混排效果,收集网上的办法无非三种: 1.自定义布局,每张图片是一个ImageView,插入图片后插入EditText,缺点是实现复杂,不能像小米便签那样同时选中图片和文字 2.通过Html.fromHtml(source),可以将图片加载写进ImageGetter,实现后无bug,但是只能显示Html,当EditText setText后,想取出之前的HTML格式      图片得到的是一个obj的字符,查看了很多博客,包括stackoverflow也没给出办法从e

STL学习思想

1.模版:一定要注意参数和返回值的模版 2.STL一系列的API:一定要注意返回值 3.容器中的都是值拷贝,而不是引用,在执行插入时,内部实行拷贝动作,所以STL中插入类时,一般都必须:无参构造函数,拷贝构造函数,重载=运算符,必须的自己重写,达到深拷贝!!! 4.一元谓词:函数只有一个参数,谓词:代表函数的返回值必须为bool类型;   二元谓词:函数只有二个参数,谓词:代表函数的返回值必须为bool类型; 5.算法和具体的数据类型相分离:通过函数对象(仿函数)来实现,本质:函数指针!!! 6

STL小结

vector常用的函数 ? begin() end() size() empty() capacity() front() back() push_back() pop_back() erase(iterator position) ? erase(iterator first, iterator last) //迭代器last指向的那个元素是不清除的 ? insert(position,n,x) ? ? ? resize() clear() 提供随机存取迭代器 list容器 STL中list是

BUG处理流程说明

一.        BUG处理流程图: 流程描述: 1.  测试人员发现bug提交给开发. 2.  开发人员判断是否是bug. 3.  如果是bug,进行修改,修改完成后更改bug状态为已解决. 4.  如果不是bug,退回给测试人员并描述退回原因,或为设计如此,或为外部原因,或者不能重现. 5.  开发人员修改完成的bug,由测试人员进行验证,确认修改正确,关闭bug. 6.  验证未通过的bug重新激活,开发人员继续修改,直至验证通过,关闭bug. 7.  测试人员需要对开发人员退回的bug

stl源码剖析-序列式容器 之 vector

vector的数据安排以及操作方式,与array(c++自身提供的序列式容器)非常相似.两者唯一的差别在于空间的运用的灵活性.array是静态空间,一旦配置了将不能随意更改其大小,若要更改需要重新配置一块新的空间,如何将元素从旧址中一一搬迁,再释放原来的系统.而vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间已容纳新元素.(实际vector每次动态分配的空间大小是有限的,超过了这个临界值同样是要像array一样进行元素搬迁,下面将会进行详细介绍)vector 是最常用的 C++

STL源码剖析——序列式容器#2 List

list就是链表的实现,链表是什么,我就不再解释了.list的好处就是每次插入或删除一个元素,都是常数的时空复杂度.但遍历或访问就需要O(n)的时间. List本身其实不难理解,难点在于某些功能函数的实现上,例如我们会在最后讨论的迁移函数splice().反转函数reverse().排序函数sort()等等. list的结点 设计过链表的人都知道,链表本身和链表结点是不一样的结构,需要分开设计,这里的list也不例外,以下是STL list的结点结构: 1 template <class T>

redis学习之二from github

大概敲了一遍基本命令,熟悉了redis的存储方式.现在开始进一步系统的学习.学习教程目前计划有三个,一个是github上的https://github.com/JasonLai256/the-little-redis-book/blob/master/cn/redis.md,一个是中文官方网站http://www.redis.cn/documentation.html,还有一个看起来像w3c风格的简单教程http://www.runoob.com/redis/redis-commands.htm

PostgreSQL 教程:数据库服务器

2016-09-01 22:48:20+08 发布  翻译:亭亭小次郎@飞象数据 2016年9月1日,PostgreSQL全球开发小组宣布了PostgreSQL9.6第一个RC候选发布版提供下载. 这个RC版本包含9.6最终版本中将要包含的新功能,也包括在前四个beta测试版本中所发现问题的补丁. 我们鼓励广大用户在新的RC版本中测试大家各自的应用. 自 Beta 4 以来的更新 PostgreSQL 9.6 RC 1 包含在测试 Beta 4过程中发现的所有问题的修复: 添加用于检查索引访问的