CCSet(内部std::set实现 成员std::setCCObject * *m_pSet count addObject containsObject begin anyObject)

本文主要是介绍CCSet(内部std::set实现 成员std::setCCObject * *m_pSet count addObject containsObject begin anyObject),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#ifndef __CC_SET_H__

#define __CC_SET_H__


#include <set>

///

STL 对这个序列可以进行查找,插入删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关系,并且当游标指向一个已删除的元素时,删除操作无效。而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集合中的元素按一定的顺序排列,并被作为集合中的实例。一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。具体实现采用了红黑树的平衡二叉树的数据结构

#include <set>
一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。
集和多集的区别是:set支持唯一键值,set中的值都是特定的,而且只出现一次;而multiset中可以出现副本键,同一值可以出现多次。
如:set<int,less<int> > set1;
less<int>是一个标准类,用于形成升序排列函数对象。降序排列是用greater<int>。
set<int> set1;
for(int i=0; i<10; ++i)
set1.insert(i);
for(set<int>::iterator p=set1.begin();p!=set1.end();++p)
cout<<*p<<"";
if(set1.insert(3).second)//把3插入到set1中
//插入成功则set1.insert(3).second返回1,否则返回0
//此例中,集中已经有3这个元素了,所以插入将失败
cout<<"set insert success";
set是一种随机存储的关联式容器,其关键词(key)和元素(value)是同一个值。set之中所有元素互不相同。set是通过二叉查找树来实现的。

创建一个空的set

  1: set<int> s0 ;

创建一个带大于比较器的set, 默认是小于比较器less<int>

  1: set<int, greater<int>> s1 ;

自定义比较函数

以类为比较器

  1: struct classcmp
  2: {
  3:   bool operator()(const int& lhs, const int& rhs)
  4:   {
  5:     return lhs < rhs ;
  6:   }
  7: };
  8: 
  9: int main(void)
 10: {
 11:   set<int, classcmp> s5 ;
 12: 
 13:   system("pause") ;
 14:   return 0 ;
 15: }

以函数指针为比较器

  1: bool fncmp(int lhs, int rhs)
  2: {
  3:   return lhs < rhs ;
  4: }
  5: 
  6: int main(void)
  7: {
  8:   bool(*fn_pt)(int, int) = fncmp ;
  9:   set<int, bool(*)(int, int)> s1(fn_pt) ;
 10: 
 11:   system("pause") ;
 12:   return 0 ;
 13: }

由于set本身是有序的,所以不提供排序函数。

///

#include "CCObject.h"


NS_CC_BEGIN


typedef std::set<CCObject *>::iterator CCSetIterator;


class CC_DLL CCSet : public CCObject

{

public:

    CCSet(void);

    CCSet(const CCSet &rSetObject);

    virtual ~CCSet(void);


    static CCSet * create();

CCSet * CCSet::create()

{

    CCSet * pRet = new CCSet();

    

    if (pRet != NULL)

    {

        pRet->autorelease();

    }

    

    return pRet;

}


//Return a copy of the CCSet, it will copy all the elements.

    CCSet* copy();


    CCSet* mutableCopy();


    int count(); //ccset 中元素个数


    void addObject(CCObject *pObject);//add into set. 会retain


    void removeObject(CCObject *pObject); //remove


    void removeAllObjects();//remove 所有元素


    bool containsObject(CCObject *pObject); //查看是否包含和参数相同的object

bool CCSet::containsObject(CCObject *pObject)

{

    return m_pSet->find(pObject) != m_pSet->end();

}


    CCSetIterator begin(); //返回首元素迭代器


    CCSetIterator end();//返回末元素迭代器


    CCObject* anyObject();//返回首元素 如果没有返回null


    virtual void acceptVisitor(CCDataVisitor &visitor);

void CCSet::acceptVisitor(CCDataVisitor &visitor)

{

    visitor.visit(this);

}




private:

    std::set<CCObject *> *m_pSet; //std::set

};



NS_CC_END


#endif // __CC_SET_H__


这篇关于CCSet(内部std::set实现 成员std::setCCObject * *m_pSet count addObject containsObject begin anyObject)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/661612

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并