使用STL模板必须重载的运算符
来源:互联网 发布:华为mate10抢购软件 编辑:程序博客网 时间:2024/06/05 13:27
STL各种容器和算法的sort和find函数对重载运算符的调用情况:
1) 二叉树类型的容器的sort和find都会调用operator < 。
2)线性类型容器sort会调用operator <;线性容器使用std::find会调用operator ==。
需要非常注意重载<运算符,分类讨论要周全。不然重则会导致dump机问题,轻则会导致排序不对。
对于< 号的重载要满足严格弱序的要求。
严格弱序定义如下:
x R x 为false
x R y => !(y R x) 另一种表示为 !(x R y) && !(y R x) 则 x=y
x R y 且 y R z 则 x R z
下面调用find 函数测试在set中find调用了< 关系,(去掉注释,调用stl 标准的find函数会调用 == 关系)
#include <iostream>#include <set>using namespace std; struct s{ int x,y; s(int xx,int yy):x(xx),y(yy){} bool operator <(const s& tmp) const { if(x < tmp.x){ return true; } else if(y < tmp.y){ return true; } return false; } };set<s> ms;int main(){ ms.insert(s(31,41)); s test(31,41); s test2(32,41); if(test < test2){ cout<<" test<test2"<<endl; } //auto itt = find(ms.begin(),ms.end(),test); auto itt = ms.find(test); if(itt!= ms.end()){ cout<< "find the value: "<<itt->x<<endl; } else{ cout<<"not found"<<endl; }}
0 0
- 使用STL模板必须重载的运算符
- 运算符重载和模板的使用
- c++ 的sort模板使用以及运算符重载
- 带模板参数的运算符重载
- C++ STL 重载运算符(++,--)
- STL运算符重载问题
- C++ STL 重载运算符
- 重载运算符的使用~~~
- C++STL系列 结构体运算符重载及优先队列的使用
- STL 各种容器排序和查找算法对运算符的使用及特别注意运算符重载错误
- 模板与重载运算符
- 高精度重载运算符模板
- C++ STL 重载运算符小于号的巧妙
- C++ STL 重载运算符小于号的巧妙
- 关于stl优先队列重载小于运算符的问题
- C#重载运算符必须静态吗? 为什么必须是静态的?
- 简单的模板实例,实现简单的运算符重载
- 运算符重载使用
- http、https 等 常用默认端口号
- 线程wait( )、sleep( )、notify( )方法
- 聊一聊监听器
- 每天一整理-java设计模式之builder模式
- 70%的人离职因领导这4宗罪
- 使用STL模板必须重载的运算符
- Python语言中的协程(生产者-消费者举例)
- 蓝桥杯 基础练习 特殊回文数 JAVA
- [leetcode]: 500. Keyboard Row
- Oracle Mobile Web Application (MWA) 学习小结(1)
- 网络端口大全
- Visio2010建立ER图并直接导出为SQL语句
- 这样读源码,不牛X也难
- 什么时候需要透析