当效率至关重要时map::operator[]与map.insert之间的选择
2016-08-02 11:32
549 查看
#include <iostream> #include <map> #include <iterator> #include <algorithm> using namespace std; class Widget{ public: Widget() { }; Widget(double weight); Widget& operator=(double weight); friend ostream& operator<<(ostream& os,Widget &w); private: double weight; }; template<typename MapType,typename KeyArgType,typename ValueArgType> typename MapType::iterator EfficentUpdateOrAdd(MapType& m,const KeyArgType& k,const ValueArgType& v) { typename MapType::iterator lb=m.lower_bound(k); if(lb!=m.end()&&!(m.key_comp()(k,lb->first))) { lb->second=v; return lb; } else { return m.insert(lb,typename MapType::value_type(k,v)); } } Widget::Widget(double weight) { this->weight=weight; } Widget& Widget::operator=(double weight) { Widget a; a.weight=weight; return a; } ostream& operator<<(ostream& os,Widget& w) { os<<w.weight; return os; } int main() { map<int,Widget> m; typedef map<int,Widget>::iterator IntWidgetMapItr; IntWidgetMapItr it=EfficentUpdateOrAdd(m,1,1.0); it=EfficentUpdateOrAdd(m,2,2.0); it=EfficentUpdateOrAdd(m,3,3.0); it=EfficentUpdateOrAdd(m,4,4.0); it=EfficentUpdateOrAdd(m,5,5.0); it=EfficentUpdateOrAdd(m,6,6.0); it=EfficentUpdateOrAdd(m,7,7.0); it=EfficentUpdateOrAdd(m,8,8.0); for(pair<int,Widget> p:m) { cout<<p.second<<endl;//运算符重载 } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解