網站首頁 編程語言 正文
前言
PropertyTree是一個非常牛叉的東西!雖然很小,但是,相當需要,相當重要!因為,很多的東西,我們不需要去開發,只需要去用就好了,這個東西的開發正的是極好極好的!
更重要的是,它來自大名鼎鼎的Boost庫,這個庫的重要性,已經是不言而喻了!
property_tree是一個保存了多個屬性的樹形數據結構!
可以使用類似訪問路徑的方式問任意節點的屬性,而且每個節點都可以用類似STL的風格遍歷子節點。
property_tree適合于應用程序的配置數據處理,可以解析xml、ini、json和info四種格式的文本數據據
它簡直,就是最好的讀取配置文件庫!
什么是property_tree?
屬性樹庫提供了一種數據結構,該數據結構存儲了任意深度嵌套的值樹,并通過一些鍵在每個級別上建立索引。樹的每個節點都存儲它自己的值,以及它的子節點和它們的鍵的有序列表。樹允許通過路徑方便地訪問任何節點,這是多個鍵的的存儲
此外,該庫為許多數據格式提供了解析器和生成器,這些數據格式可以由這樣的樹表示,包括XML、INI和JSON
屬性樹是通用的數據結構,但特別適合保存配置數據。樹提供了自己的樹特有的接口,并且每個節點也是其子節點的stl兼容序列。【說白了,這就是一個自我嵌套的數據結構】
在概念上,節點可以被認為是以下結構:
struct ptree { data_type data;// data associated with the node list< pair<key_type, ptree>> children;// ordered list of named children };
可以看到,這個就是一個自我嵌套的一個數據結構!
key_type和data_type在某種程度上都是可配置的,但是通常是std::string或std::wstring,而解析器只處理這種樹。
許多軟件項目在其生命周期的某一時刻開發了類似的工具,而屬性樹也以相同的方式產生。我們希望lib能拯救許多人,讓他們不要重新發明輪子。
實現代碼
#include <iostream> #include <string> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> using namespace std; using namespace boost; // 寫入文件 void init_ini(const std::string &filename) { using boost::property_tree::ptree; ptree pt; // 增加新的鍵值對 pt.add("config.address", "192.168.1.1"); pt.add("config.port", 22); // 修改原有鍵值對 pt.put("config.port", 3389); write_ini(filename, pt); } int main(int argc, char *argv[]) { std::string f("c://config.ini"); init_ini(f); // 讀取ini文件 boost::property_tree::ptree ptr, tag; boost::property_tree::ini_parser::read_ini("c://config.ini", ptr); tag = ptr.get_child("config"); std::string address = tag.get<std::string>("address"); int port = tag.get<int>("port"); std::cout << "地址: " << address << " 端口: " << port << std::endl; std::system("pause"); return 0; }
原文鏈接:https://www.cnblogs.com/LyShark/p/15765692.html
相關推薦
- 2023-04-26 React高級指引之Refs?and?the?DOM使用時機詳解_React
- 2022-09-23 Go語言fmt.Sprintf格式化輸出的語法與實例_Golang
- 2022-12-09 C++?opencv學習之圖像像素的邏輯操作_C 語言
- 2022-04-11 蝴蝶優化算法及實現源碼_相關技巧
- 2022-08-05 C#實現圖形界面的時鐘_C#教程
- 2022-04-11 用python的哈希函數對密碼加密_python
- 2022-09-09 ElasticSearch核心概念_其它綜合
- 2022-05-14 c++和python實現順序查找實例_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支