使用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对于C++编程者而言,相信都非常喜爱吧。但是其中的排序准则,你亲自试过修改吗?如何修改?请参考本文档的思路和实现过程吧。
NULL 博文链接:https://jacky-dai.iteye.com/blog/2308000
STL的容器deque的详细使用方法和文档 6.0代码
STL关联容器入门
c++ STL容器使用代码,方便学习 vector string deque queue list set map multiset multimap 容器的API使用方法等
该文档详细讲解了C++中标准容器的使用,是一份不错的学习资料哦
详细解说STL排序 详细解说STL排序 详细解说STL排序
STL容器的一些使用简介
STL顺序容器:list的使用。 (Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. )
stl set容器 详细 使用方法 有每个接口的说明
使用STL中的VECTOR LIST 容器实现学生管理系统,代码实现增删差改
STL 各种例子,用VC2005编译,全部通过,欢迎下载
基于stl共享内存,可以像使用STL容器一样使用共享内存。方便快捷。具体参考里面的代码实现
c++中STL的vector,Map,set等容器还有一些好的算法已经写好了,只需我们去调用,学好STL对算法很有帮助
详细讲解了STL中vector容器的用法.
STL容器,用思维导图的方式表达了一下,其中一些所有容器都通用的函数没有列举如a.size(),a.capacity()等。。希望对各位有帮助.
STL -容器,string容器
STL容器和算法函数表. 玩C++清一定看看STL
解压后有5个CPP文件。全部VC6.0编译通过并运行。掌握STL的相关函数和算法能大大提高程序的效率。大大缩短程序代码。链表,栈,容器等可直接调用!
STL中的排序算法一览