33,321
社区成员




class c(){
public:
std::map<int,myObj> m_C;
};
class c(){
public:
MContainer<myObj> m_C;
};
template<class T>
class MContainer : public std::map<int, T>
{
//构造函数省略
};
2、萃取
template<class T>
struct MContainer
{
typedef std::map<int, T> type;
};
第二种方法使用时得这样:
MContainer<myObj>::type m_C;
//链表式存储
//节点
template<class TNodeData>
class StorageNode
{
public:
StorageNode();
~StorageNode();
void StoreData(TNodeData data);
TNodeData GetData();
void SetIndex(UID index);
UID GetIndex();
void StoreData(TNodeData data, UID index);
StorageNode<TNodeData>* m_pPre;//前一个的指针
StorageNode<TNodeData>* m_pNext;//后一个指针
private:
TNodeData m_data;//存储数据
UID m_index;//存储顺序的依据
};
//自身根据数据量的大小来选择使用链表还是使用哈希表
//该功能待添加
template<class TNodeData>
class Storage
{
public:
Storage();
~Storage();
//int Store(TNodeData p_data); //直接存储一个数据,id使用随机值获取
int Store(TNodeData p_data,UID p_index);//直接存储一个数据,可能会有重复,会自行进行判断
TNodeData GetData(UID p_index);//通过索引获取数据
UID GetMaxID(); //返回一个最大的ID,主要是在模块进行使用,对于物品和变量,则没有必要进行使用
int Remove(UID p_index);//通过索引移除一个数据(节点)
void Abandon();//放弃内部节点,和Clear之间的具体用法待定
void Clear();//删除所有内部的接点以及数据
StorageNode<TNodeData>* GetHead(); //返回第一个元素的节点
protected:
//将Node类封装起来
StorageNode<TNodeData>* StoreN(StorageNode<TNodeData>* p_node);//插入一个节点,这个节点在原来的数据存储中是没有的
StorageNode<TNodeData>* GetNode(UID p_index);//通过索引获取节点以便直接存储数据,内部调用
INT Remove(StorageNode<TNodeData>* p_node);//通过节点移除一个节点,通过节点方式
INT m_iCount;//Storage总的物品类别数量
void Convert();//Storage在两种模式之间转换
StorageNode<TNodeData>* m_head;//Storage链表指针头
BOOL m_bLinkMode;//Storage true=link模式,false=hash模式
UID m_maxID; //内部存储的最大id
BOOL m_bisP;//存储的数据是否是指针的一个判断
};
厄……顺便问一下,我这个代码是否非常丑陋非常无用?是否应该直接摒弃转而使用map了?
另外map查找在100万以内都是很强悍的吗?
谢谢。