【第10章 关联容器】多关键字Map_Set实例
来源:互联网 发布:便笺元数据损坏怎么办 编辑:程序博客网 时间:2024/06/08 13:22
(1)排序准则
less返回值是不能含糊的,即:当less(a,b)=true时,less(b,a)一定要为false,
否则这两个节点就会被当成相等的节点。
【map相等性比较】两次调用less实现:less( a, b )和less( b, a),两者都为false则为相等。
map在插入、查找、排序时,实际调用<操作符(两次调用),并不使用==操作符。
#if 1// 多值组合作为key的情形#include <iostream>#include <string>#include <vector>#include <map>#include <utility>using namespace std;//template<typename int>class key{friend class equal;friend bool operator<( const key&, const key& );friend bool operator==( const key&, const key& );friend ostream& operator<<( ostream&, const key& );public:key( int x, int y ) : m_eyesight(x), m_height(y){}private:int m_eyesight;int m_height;};// less返回值是不能含糊的,即:当less(a,b)=true时,less(b,a)一定要为false,// 否则这两个节点就会被当成相等的节点。// 【map相等性比较】两次调用less实现:less( a, b )和less( b, a),两者都为false则为相等。// map在插入、查找、排序时,实际调用<操作符,并不使用==操作符bool operator<( const key& kL, const key& kR ) { //按eyesight升序 + height升序排列if( kL.m_eyesight != kR.m_eyesight ){return kL.m_eyesight < kR.m_eyesight;}else{// 写错的地方:kL.m_height < kL.m_height;2014-6-12 16:12:11return kL.m_height < kR.m_height;}}bool operator==( const key& kl, const key& kr ){if( kl.m_eyesight == kr.m_eyesight &&kl.m_height == kr.m_height )return true;elsereturn false;}struct equal{bool operator()( const key& kl, const key& kr ){return kl.m_height == kr.m_height;}};ostream& operator<<( ostream& os, const key& k){os << k.m_eyesight << "\t" << k.m_height;return os;}int main( void ){map<key, string> mapKey;mapKey.insert( make_pair( key( 3, 1 ), "ddd" ) );mapKey.insert( make_pair( key( 1, 1 ), "aaa" ) );mapKey.insert( make_pair( key( 2, 1 ), "bbb" ) );mapKey.insert( make_pair( key( 2, 2 ), "ccc" ) ); map<key, string>::const_iterator it;for( it = mapKey.begin(); it != mapKey.end(); ++it )cout << it->first << "\t" << it->second << endl;it = mapKey.find( key( 2, 1 ) );cout << it->first << "\t" << it->second << endl;return 0;}#elif 0// 单值作为key的情形#include <iostream>#include <string>#include <vector>#include <map>#include <utility>using namespace std;class Student{friend ostream& operator<<( ostream& os, const Student& stu );public:Student(int id, string name, float eyesight, float height ) :m_id( id ), m_name( name ), m_eyesight( eyesight ), m_height( height ){}private:int m_id;// 学号string m_name;// 姓名float m_eyesight;// 视力float m_height;// 身高};ostream& operator<<( ostream& os, const Student& stu ){os << stu.m_id << "\int" << stu.m_name << "\int" << stu.m_eyesight << "\int" << stu.m_height;return os;}int main( void ){cout << "be positive..." << endl;map<int, Student> stuMap;stuMap.insert( make_pair( 3, Student( 3, "Dudley", 1.1f, 163.4f ) ) );stuMap.insert( make_pair( 1, Student( 1, "Bob",1.1f, 170.2f ) ) );stuMap.insert( make_pair( 2, Student( 2, "Chris", 1.5f, 166.6f ) ) );map<int, Student>::const_iterator it = stuMap.begin();for( ; it != stuMap.end(); ++it ){cout << it->second << endl;}return 0;}#endif
前四行为插入直接输出结果,最后一行为查找结果——
0 0
- 【第10章 关联容器】多关键字Map_Set实例
- 第10章 关联容器
- 第10章 关联容器
- 第10章 关联容器
- 复习小记----第10章 关联容器
- 《C++ Primer》 第10章 关联容器
- 《C++ Primer》 第10章 关联容器
- 《c++ primer》第 10 章 关联容器
- 【C++ Primer】第10章 关联容器
- 第11章-关联容器
- map_set
- map_set
- C++Primer第10章关联容器习题
- 【C++primer学习笔记】第10章 关联容器
- c++ primer学习笔记 第 10 章 关联容器
- 关联容器map实例
- 第7章 使用关联容器
- C++ Primer : 第十一章 : 关联容器之概述、有序关联容器关键字要求和pair类型
- NGUI基本组件学习(1)-->Label、Button、Input
- 实现Java3D所需jar包和其他
- java实现的bean类型和map类型相互转换的工具类
- 什么是android
- QThread用法总结
- 【第10章 关联容器】多关键字Map_Set实例
- 基于MeanShift的目标跟踪算法及实现
- Cocos2d-x3.0下 Lua与C++相互调用
- 2014-06-12阅读
- ViewHolder定义时类型为static
- Android中文API(122) —— AudioRecord
- Eclipse启动错误:java was started but returned exit code=1
- 日期控件的使用以及控件定位
- vi自动补全