当前位置:网站首页>Implementation of adjacency table of SQLite database storage directory structure 2-construction of directory tree
Implementation of adjacency table of SQLite database storage directory structure 2-construction of directory tree
2022-07-08 00:53:00 【kupeThinkPoem】
Catalog
Two 、 Database storage directory structure adjacency table
2、 Code implementation build tree
One 、 summary
Storage directory structure ( Trees ) It's a common problem , There are many solutions . The main methods are adjacency tables 、 Advanced adjacency list 、 Improved preorder tree traversal 、 recursive query 、 Enumerate paths 、 Nested sets 、 Closure table, etc .
Two 、 Database storage directory structure adjacency table
The first and most elegant method we will try is called “ Adjacency table model ” or “ Recursive method ”. This is a good method , Because you only need a simple function to traverse your tree . In our food store , The adjacency table looks like this :
As you can see , In the adjacency table method , You saved the of each node “ Parent node ”. We can see ‘Pear’ yes ‘Green’ The son of , yes ‘Fruit’ My son, wait . The root node “Food” No parent value . For the sake of simplicity , I use “title” Value to identify each node . Of course , In a real database , You will use the number of each node id.
3、 ... and 、 Tree building
1、 data structure
Recently, I want to set multiple string information in a field of the database , How to intercept one of the strings ? Need to get the parentID This property performs the corresponding operation .
struct dirpro
{
char type;
char opType;
char parentID[32];
char rerserved[128-32-1-1];
};
struct DirProNode
{
int id;
std::string name;
std::string parId;
QLinkedList<DirProNode> children;
};
struct DirInfo
{
int id;
std::string name;
dirpro pro;
};
2、 Code implementation build tree
DirProNode getTree()
{
std::vector<DirInfo> vInfos =getdirproFromDb();// Read all directory information from the database
DirProNode root;// The root node
root.id=-1;
root.parId="NULL";
root.name="root";
int nsize=vInfos.size();
std::map<std::string,DirProNode*> mapDirThink;
std::vector<bool> vecMark;
vecMark.resize(nsize);
for(int i=0;i<nsize;++i)
{
vecMark[i]=false;
}
while(true)
{
int ncount=0;
for(int i=0;i<nsize;++i)
{
if(vecMark[i])
{continue;}
DirProNode dirproNode;
if(convert(vInfos[i],dirproNode)
{
if(dirproNode.parId=="NULL" || dirproNode.parId.isEmpty())
{
root.children.push)back(dirproNode);
mapDirThink[QString::number(dirproNode.id).c_str()]=&(root.children.back());
ncount++;
vecMark[i]=true;
}
else
{
mapDirThink[dirproNode.parId]->children.push_back(dirproNode);
mapDirThink[QString::number(dirproNode.id).c_str()]=&(root.children.back());
ncount++;
vecMark[i]=true;
}
}
else
{
vecMark[i]=false;
}
}
if(ncount==0)
{break;}
}
return root;
}
Four 、QTreeWidget Show tree
With DirProNode This data structure , We can use preorder traversal to build the directory structure and QTreeWidget Intermediate display .
边栏推荐
- An error is reported during the process of setting up ADG. Rman-03009 ora-03113
- Lecture 1: the entry node of the link in the linked list
- Introduction to paddle - using lenet to realize image classification method I in MNIST
- 【obs】官方是配置USE_GPU_PRIORITY 效果为TRUE的
- What has happened from server to cloud hosting?
- 丸子官网小程序配置教程来了(附详细步骤)
- STL -- common function replication of string class
- The standby database has been delayed. Check that the MRP is wait_ for_ Log, apply after restarting MRP_ Log but wait again later_ for_ log
- Kubernetes static pod (static POD)
- 华泰证券官方网站开户安全吗?
猜你喜欢
SDNU_ ACM_ ICPC_ 2022_ Summer_ Practice(1~2)
NVIDIA Jetson test installation yolox process record
Langchao Yunxi distributed database tracing (II) -- source code analysis
“一个优秀程序员可抵五个普通程序员”,差距就在这7个关键点
FOFA-攻防挑战记录
新库上线 | CnOpenData中华老字号企业名录
New library online | cnopendata China Star Hotel data
fabulous! How does idea open multiple projects in a single window?
ThinkPHP kernel work order system source code commercial open source version multi user + multi customer service + SMS + email notification
Letcode43: string multiplication
随机推荐
New library launched | cnopendata China Time-honored enterprise directory
Introduction to paddle - using lenet to realize image classification method I in MNIST
Deep dive kotlin synergy (XXII): flow treatment
【愚公系列】2022年7月 Go教学课程 006-自动推导类型和输入输出
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
Where is the big data open source project, one-stop fully automated full life cycle operation and maintenance steward Chengying (background)?
《因果性Causality》教程,哥本哈根大学Jonas Peters讲授
牛客基础语法必刷100题之基本类型
应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设
NVIDIA Jetson测试安装yolox过程记录
After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?
[Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
股票开户免费办理佣金最低的券商,手机上开户安全吗
大数据开源项目,一站式全自动化全生命周期运维管家ChengYing(承影)走向何方?
ReentrantLock 公平锁源码 第0篇
Service Mesh的基本模式
Leetcode brush questions
fabulous! How does idea open multiple projects in a single window?
串口接收一包数据
新库上线 | CnOpenData中国星级酒店数据