STL中容器使用自定义排序时出现assert
来源:互联网 发布:unity3d手机游戏逆向 编辑:程序博客网 时间:2024/06/15 08:54
使用STL容器时(此次我遇到的问题是使用STL的优先级队列priority_queue时出现的),如果要放入的内容非基本类型(自定义对象或结构体)时,一般需要使用自定义的排序方法,我的自定义排序是这样写的:
struct cmp{bool operator()(const Edge* e1,const Edge* e2){if(e1->weight >= e2->weight)return true;return false;}};这种写法初看没有什么问题,但运行之后便出现了Expression: invalid operator< ,跟进之后发现该断言出现在algorithm的2457行,而最终抛出该assert的代码是这样写的:
if (!_Pred(_Left, _Right)) return (false);else if (_Pred(_Right, _Left)) _DEBUG_ERROR2("invalid operator<", _File, _Line);return (true);
这一段的代码的意思是,如果你交换cmp的两个要比较的元素的位置,得出的结果不能一样,也就是说,如果a比b小,则b肯定不会比a小 如果定义的函数既得出a比b小,又得出b比a小,那这个函数定义得肯定有问题. 所以对于我上面的cmp函数,如果有两个要比较的元素值相等的时候,就会出现这种情况,将>=改为>就行了,交换位置后就会得到不同的返回结果. 同理,很多人喜欢直接写成 return a-b 这样也是不行的; a b相等时返回值是相同的.
- STL中容器使用自定义排序时出现assert
- C++ 中list容器,自定义sort排序规则,stl中sort自定义排序规则
- C++ 中list容器,自定义sort排序规则,stl中sort自定义排序规则
- C++ 中list容器,stl中sort自定义排序规则 注意事项
- 多线程中使用stl容器
- 使用stl标准容器,遍历容器时出现 iterators incompatible 错误的其中两种原因
- (c++)关于stl里set容器的自定义排序
- (c++)关于stl里set容器的自定义排序
- 关于stl里set容器的自定义排序
- (c++)关于stl里set容器的自定义排序
- STL中map容器使用自定义key类型报错详解
- stl容器排序
- STL 容器的排序
- C++ STL容器中erase的使用
- STL中容器使用erase()遍历删除
- STL 中 容器 list 的使用
- STL 中容器 map 的使用
- STL中list的容器使用介绍
- POJ 3239解题报告
- c#中关键字ref和out的区别
- linux用mknod怎么创建设备,创建了设备怎么用
- LuaXml 简单介绍
- 异步ajax时重复接收
- STL中容器使用自定义排序时出现assert
- Spring JdbcTemplate使用
- android4.0 编译时,不要产生odex文件
- 关于开源 和 保护程序员利益的讨论
- VS 生成事件 文件拷贝
- Android自定义属性,attr format取值类型
- POJ 3468(成段更新)
- main 和launcher
- 仿 Google Reader 随滚动条滚动加载页面效果