multiset的使用
来源:互联网 发布:淘宝网红直播费用 编辑:程序博客网 时间:2024/06/06 01:37
使用环境VC2010
解决方法很简单, 使用指针.
但是这样修改, 编译没通过. (我个人的理解: 参照"代码1", 依葫芦画瓢, 得到的"代码2"应该是可行的, 但实际上编译报错了).
报错是 关于bool operator()(const STItem*& pSTItemA,const STItem*& pSTItemA) const
中STItem* 不能转换为 const STItem*& 之类的.
可能是我自己在指针, 常量指针上的理解不透彻吧.
路走弯了一点, 合适就好.
感觉"代码2"是可行的, 差一点点.
一. 简单使用
"代码1"
struct STItem{STItem();STItem(const STItem& stItem);~STItem();STItem(int nData);STItem& operator=(const STItem& stItem);void Release();int m_nData;};class CItemCmp{public:// 这个必须定义和实现bool operator()(const STItem& stItemA,const STItem& stItemA) const{// 在这个函数里面, 你喜欢怎样比较都行.return stItemA.m_nData < stItemA.m_nData;}};// CItemCmp很明显就是作为一个类似"函数对象"的角色typedef std::multiset<STItem, CItemCmp> STItemMultiset;typedef STItemMultiset::iterator STItemMultisetIterator;// 使用STItemMultiset itemMultset;itemMultset.insert(STItem(1));itemMultset.insert(STItem(2));itemMultset.insert(STItem(5));itemMultset.insert(STItem(8));itemMultset.insert(STItem(9));itemMultset.insert(STItem(6));itemMultset.insert(STItem(1));itemMultset.insert(STItem(4));itemMultset.insert(STItem(2));// itemMultset最终会得到排序// 按照STItem.m_nData的升序排列// 1, 1, 2, 2, 4, 5, 6, 8, 9
二. 遇到问题
上面例子中STItem是以对象形式存储在multiset容器中的, 如果STItem是一个比较大的对象的话, multiset内部的内存拷贝很频繁, 效率底下.解决方法很简单, 使用指针.
"代码2"
struct STItem{STItem();STItem(const STItem& stItem);~STItem();STItem(int nData);STItem& operator=(const STItem& stItem);void Release();int m_nData;};class CItemCmp{public:// 这里参数使用指针bool operator()(const STItem*& pSTItemA,const STItem*& pSTItemA) const{// 在这个函数里面, 你喜欢怎样比较都行.return pSTItemA->m_nData < pSTItemA->m_nData;}};// 这里需要改变typedef std::multiset<STItem*, CItemCmp> STItemMultiset;typedef STItemMultiset::iterator STItemMultisetIterator;// 使用STItemMultiset itemMultset;itemMultset.insert(new STItem(1));// 这里需要改变
但是这样修改, 编译没通过. (我个人的理解: 参照"代码1", 依葫芦画瓢, 得到的"代码2"应该是可行的, 但实际上编译报错了).
报错是 关于bool operator()(const STItem*& pSTItemA,const STItem*& pSTItemA) const
中STItem* 不能转换为 const STItem*& 之类的.
可能是我自己在指针, 常量指针上的理解不透彻吧.
三. 走一点弯路来解决
"代码3"
struct STItem{STItem();STItem(const STItem& stItem);~STItem();STItem(int nData);STItem& operator=(const STItem& stItem);void Release();int m_nData;};// 增加这个中间类// 这个类里面管理STItem的指针, 在外面提供给CItemCmp类的operator()函数的参数作为引用使用.class CSTItem{public:CSTItem(STItem* pSTItem){m_pSTItem = pSTItem;}CSTItem(){m_pSTItem = 0;}CSTItem(const CSTItem& cSTItem){*this = cSTItem;}~CSTItem(){m_pSTItem = 0;}CSTItem& operator=(const CSTItem& cSTItem){m_pSTItem = cSTItem.m_pSTItem;return *this;}STItem* m_pSTItem;};class CItemCmp{public:// 这里参数使用指针bool operator()(const CSTItem& pCSTItemA,const STItem*& pCSTItemA) const{// 在这个函数里面, 你喜欢怎样比较都行.// 多了一层指针引用return pCSTItemA->m_pSTItem->m_nData < pSTItemCmpA->m_pSTItem->m_nData;}};// 这里需要改变typedef std::multiset<CSTItem, CItemCmp> CSTItemMultiset;typedef CSTItemMultiset::iterator CSTItemMultisetIterator;// 使用CSTItemMultiset itemMultset;itemMultset.insert(CSTItem(new STItem(1)));// 这里需要改变
路走弯了一点, 合适就好.
感觉"代码2"是可行的, 差一点点.
0 0
- multiset的使用
- multiset的使用
- std::multiset 的使用
- multiset(STL)的使用
- CF603E,multiset的使用要点
- multiset的使用以及集合的运算
- STL set和multiset的使用
- c++ STL set和multiset的使用
- C++ STL set和multiset的使用
- C++ STL set和multiset的使用
- c++ STL set和multiset的使用
- multiset容器使用上的一些疑问
- C++ STL set和multiset的使用
- C++ STL set和multiset的使用
- guava multimap 和 multiset的使用
- C++ STL set和multiset的使用
- multiset find使用...
- Set与MultiSet使用
- 【字符串&最长无重复子串】Longest Substring Without Repeating Characters
- 要多写博客
- Testing: Review Webserver Metafiles for Information Leakage (OTG-INFO-003)
- 《程序员,你伤不起》读书笔记 (五) :当我彻底放弃自私自利后,前途变得一片光明,不能过多的只是关注自己的功夫,生活不能只局限在方寸虚拟世界里
- 内存监测工具DDMS-->Heap
- multiset的使用
- 微博文本情感分析-开篇
- Myeclipse生成doc文档时出现,编码 GBK 的不可映射字符
- mongodb学习之五:聚合之group复习
- sort()函数与qsort()函数及其头文件
- JIRA6.1.5 设置开机自启动 linux
- oracle数据类型
- 医药健康API开放接口
- C++深复制和浅复制