当前位置:网站首页>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 .
边栏推荐
- letcode43:字符串相乘
- Summary of weidongshan phase II course content
- Qt添加资源文件,为QAction添加图标,建立信号槽函数并实现
- Basic principle and usage of dynamic library, -fpic option context
- Fofa attack and defense challenge record
- How can CSDN indent the first line of a paragraph by 2 characters?
- Lecture 1: the entry node of the link in the linked list
- Deep dive kotlin collaboration (the end of 23): sharedflow and stateflow
- AI遮天传 ML-初识决策树
- Vscode software
猜你喜欢

Service mesh introduction, istio overview

接口测试要测试什么?

Password recovery vulnerability of foreign public testing

fabulous! How does idea open multiple projects in a single window?

C # generics and performance comparison

My best game based on wechat applet development

After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?

New library launched | cnopendata China Time-honored enterprise directory

An error is reported during the process of setting up ADG. Rman-03009 ora-03113

jemter分布式
随机推荐
炒股开户怎么最方便,手机上开户安全吗
赞!idea 如何单窗口打开多个项目?
【obs】Impossible to find entrance point CreateDirect3D11DeviceFromDXGIDevice
Basic mode of service mesh
Basic types of 100 questions for basic grammar of Niuke
C# 泛型及性能比较
Cause analysis and solution of too laggy page of [test interview questions]
深潜Kotlin协程(二十二):Flow的处理
接口测试进阶接口脚本使用—apipost(预/后执行脚本)
新库上线 | CnOpenData中国星级酒店数据
1293_ Implementation analysis of xtask resumeall() interface in FreeRTOS
The weight of the product page of the second level classification is low. What if it is not included?
他们齐聚 2022 ECUG Con,只为「中国技术力量」
v-for遍历元素样式失效
Cve-2022-28346: Django SQL injection vulnerability
3年经验,面试测试岗20K都拿不到了吗?这么坑?
A brief history of information by James Gleick
Stock account opening is free of charge. Is it safe to open an account on your mobile phone
Vscode software
ReentrantLock 公平锁源码 第0篇