📄 aciter.h
字号:
/*
* CACIter:用于记录结点访问状态的辅助模板类。TNodeKey为唯一确定当前状态的哈希值类型,应当是一个struct。
* 三种状态是:nsNone:无或不在结点访问状态表中;nsVisiting:正在访问;nsDead:已死亡
*/
#pragma once
#include "StdAfx.h"
#include <map>
enum NodeStatus {
nsNone,
nsVisiting,
nsDead
};
//template<typename _Ty>
//class CMemLessTempl
// : public std::binary_function<_Ty, _Ty, bool>
//{
//public:
// bool operator()(const _Ty& _Left, const _Ty& _Right) const
// {
// /* 对于两个struct的比较,用内存逐byte比较即可。
// 要注意的是struct如果不是按字节对齐的话,需要在初始化时memset为全0,否则可能有干扰数据 */
// unsigned char *p1 = (unsigned char *)&_Left, *p2 = (unsigned char *)&_Right;
// return memcmp(p1, p2, sizeof(_Ty)) < 0;
// }
//};
template<typename TNodeKey>
class CACIter
{
private:
typedef std::map<TNodeKey, enum NodeStatus, CMemLessTempl<TNodeKey> > NODESTATUSMAP;
/* 结点访问状态记录树 */
NODESTATUSMAP m_NodeStatus;
public:
/* 获取当前结点访问状态。找不到也返回nsNone */
virtual enum NodeStatus GetStatus(TNodeKey key)
{
NODESTATUSMAP::iterator it = m_NodeStatus.find(key);
if ( it == m_NodeStatus.end() ) return nsNone;
return it->second;
}
/* 设置当前结点访问状态。如果设为nsNone,则可删除这个结点 */
virtual void SetStatus(TNodeKey key, enum NodeStatus status)
{
if (status == nsNone)
{
NODESTATUSMAP::iterator it = m_NodeStatus.find(key);
if ( it == m_NodeStatus.end() ) return;
m_NodeStatus.erase(it);
return;
}
m_NodeStatus[key] = status;
}
public:
CACIter(void) {}
~CACIter(void) {}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -