本文主要是介绍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)快,但查找或添加末尾的元素时会有些慢。具体实现采用了红黑树的平衡二叉树的数据结构。
创建一个空的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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!