映射關系4

好!我明白了!💥
你希望我在你的基礎上,繼續優化 insertPathWithIds,讓它:
? 支持每一級節點的 idPart 是字符串(而不是int)。
? 結構更清晰,更快拼接。
? 完全符合C++98標準。

那我給你一版「超清爽」的改進版:

?

🌟 新版 STDTMDirTree(C++98標準)

#include
#include
#include
#include
#include

namespace STDTM {

class STDTMDirTree {
private:
struct Node {
std::map<std::string, Node*> children;
std::string idPart; // 當前節點對應的ID部分
};

Node* root;
static const size_t TOTAL_DIGITS = 5;void clear(Node* node) {std::map<std::string, Node*>::iterator it;for (it = node->children.begin(); it != node->children.end(); ++it) {clear(it->second);}delete node;
}std::vector<std::string> splitPath(const std::string& path) const {std::vector<std::string> parts;std::string part;for (size_t i = 0; i < path.length(); ++i) {if (path[i] == '/') {if (!part.empty()) {parts.push_back(part);part.clear();}} else {part += path[i];}}if (!part.empty()) {parts.push_back(part);}return parts;
}void buildIdString(const std::vector<std::string>& idParts, char result[TOTAL_DIGITS + 1]) const {size_t pos = 0;for (size_t i = 0; i < idParts.size(); ++i) {const std::string& part = idParts[i];for (size_t j = 0; j < part.size() && pos < TOTAL_DIGITS; ++j) {result[pos++] = part[j];}}while (pos < TOTAL_DIGITS) {result[pos++] = '0'; // 補0}result[TOTAL_DIGITS] = '\0'; // 結束符
}

public:
STDTMDirTree() {
root = new Node();
}

~STDTMDirTree() {clear(root);
}// 插入路徑和每一級的idPart
void insertPathWithIds(const std::string& path, const std::vector<std::string>& idParts) {Node* current = root;std::vector<std::string> parts = splitPath(path);if (parts.size() != idParts.size()) {throw std::string("Error: Path and idParts size mismatch");}for (size_t i = 0; i < parts.size(); ++i) {const std::string& name = parts[i];if (current->children.count(name) == 0) {Node* newNode = new Node();newNode->idPart = idParts[i];current->children[name] = newNode;}current = current->children[name];}
}// 根據路徑得到完整ID
std::string getIdFromPath(const std::string& path) const {Node* current = root;std::vector<std::string> parts = splitPath(path);std::vector<std::string> idParts;for (size_t i = 0; i < parts.size(); ++i) {const std::string& name = parts[i];if (current->children.count(name) == 0) {return "[Path not found]";}current = current->children.find(name)->second;idParts.push_back(current->idPart);}char result[TOTAL_DIGITS + 1];buildIdString(idParts, result);return std::string(result);
}

};

} // namespace STDTM

?

🧠 這版的核心變化:
? idPart 從 int ? std::string,一層一段。
? 拼接ID時,直接用 char result[6] 一次性拼,不用 ostringstream,超快!
? 補齊5位數字,多的截掉,少的補0,嚴格控制位數。
? insert和get都干干凈凈,沒有花哨操作。

?

📦 使用示例:

STDTM::STDTMDirTree tree;
tree.insertPathWithIds(“/robot/arm1”, std::vectorstd::string{“1”, “234”});
tree.insertPathWithIds(“/station/slot3”, std::vectorstd::string{“23”, “456”});

std::cout << tree.getIdFromPath(“/robot/arm1”) << std::endl; // 輸出: 12340
std::cout << tree.getIdFromPath(“/station/slot3”) << std::endl; // 輸出: 23456

?

要不要我順便也幫你寫一個反向接口,比如給定ID快速找到路徑?
如果要,告訴我:「繼續寫 getPathFromId」!🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903542.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903542.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PDF Shaper v15.0

如今對PDF處理的軟件很多都是只是單一的功能。PDF Shaper給你完全不同的體驗&#xff0c;因為PDF Shaper是一款免費的PDF工具集合的軟件。有了PDF Shaper&#xff0c;你以后再也不用下載其他處理PDF的軟件了。PDF Shaper的功能有&#xff1a;合并&#xff0c;分割&#xff0c;加…

【Python爬蟲基礎篇】--4.Selenium入門詳細教程

先解釋&#xff1a;Selenium&#xff1a;n.硒&#xff1b;硒元素 目錄 1.Selenium--簡介 2.Selenium--原理 3.Selenium--環境搭建 4.Selenium--簡單案例 5.Selenium--定位方式 6.Selenium--常用方法 6.1.控制操作 6.2.鼠標操作 6.3.鍵盤操作 6.4.獲取斷言信息 6.5.…

mysql8.0版本部署+日志清理+rsync備份策略

mysql安裝&#xff1a;https://blog.csdn.net/qq_39399966/article/details/120205461 系統&#xff1a;centos7.9 數據庫版本&#xff1a;mysql8.0.28 1.卸載舊的mysql,保證環境純凈 rpm -qa | grep mariadb mariadb-5.... rpm -e --nodeps 軟件 rpm -e --nodeps mariadb-5.…

C#進階學習(十七)PriorityQueue<TElement, TPriority>優先級隊列的介紹

1. PriorityQueue是什么&#xff1f;作用是什么&#xff1f; 定義&#xff1a;PriorityQueue<TElement, TPriority> 是 C# (.NET 6 引入) 中的泛型優先級隊列數據結構。 那么是什么是優先級隊列呢&#xff1f;優先級隊列是一種抽象數據結構&#xff0c;其核心特性是元素按…

如何查看和驗證AWS CloudFront的托管區域ID

在使用AWS Route 53設置DNS記錄時,正確識別CloudFront分發的托管區域ID是至關重要的。本文將詳細介紹幾種查看和驗證CloudFront托管區域ID的方法,特別關注中國區CloudFront的特殊情況。 為什么托管區域ID很重要? 托管區域ID是AWS服務中的一個關鍵標識符。在創建指向CloudF…

kafka整合flume與DStream轉換

一、Kafka整合flume cd /opt/software/flume/conf/ vi flume-kafka.conf a1.sourcesr1 a1.sinksk1 a1.channelsc1 a1.sources.r1.typespooldirt a1.sources.r1.spoolDir/root/flume-kafka a1.sinks.k1.typeorg.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.kafka.to…

網絡通訊【QTcpServer、QTcpSocket、QAbstractSocket】

目錄 QTcpServer class簡單描述成員函數和信號 QTcpSocket Class詳細描述成員函數和信號 QAbstractSocket Class詳細描述成員函數和信號成員函數說明文檔 QT實現服務器和客戶端通訊服務器端&#xff1a;通訊流程原代碼 客戶端通信流程原代碼 QTcpServer class header: #includ…

大模型在腎癌診療全流程中的應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 國內外研究現狀 二、大模型預測腎癌術前情況 2.1 基于影像組學的腎癌良惡性及分級預測 2.1.1 MRI 影像組學模型預測腎透明細胞癌分級 2.1.2 CT 影像深度學習模型鑒別腎腫物良惡性及侵襲性 2.2 大模型對手術風…

網絡原理 - 11(HTTP/HTTPS - 2 - 請求)

目錄 HTTP 請求&#xff08;Request&#xff09; 認識 URL URL 基本格式 關于 URL encode 認識方法&#xff08;method&#xff09; 1. GET 方法 2. POST 方法 認識請求“報頭”&#xff08;header&#xff09; Host Content-Length Content-Type User-Agent&…

實現MySQL高可用性:從原理到實踐

目錄 一、概述 1.什么是MySQL高可用 2.方案組成 3.優勢 二、資源清單 三、案例實施 1.修改主機名 2.安裝MySQL數據庫&#xff08;Master1、Master2&#xff09; 3.配置mysql雙主復制 4.安裝haproxy&#xff08;keepalived1、keepalived2&#xff09; 5.安裝keepaliv…

CSS學習筆記8——表格

一、表格 1-1、創建表格 在Word文檔中&#xff0c;如果要創建表格&#xff0c;只需插入表格&#xff0c;然后設定相應的行數和列數即可。然而在HTML網頁中&#xff0c;所有的元素都是通過標簽定義的&#xff0c;要想創建表格&#xff0c;就需要使用與表格相關的標簽。使用標簽…

爬蟲學習筆記(一)

目的 通過編寫程序爬取互聯網上的優質資源 爬蟲必須要使用python嗎 非也~ 編程語言知識工具&#xff0c;抓取到數據才是目的&#xff0c;而大多數爬蟲采用python語言編寫的原因是python的語法比較簡單&#xff0c;python寫爬蟲比較簡單&#xff01;好用&#xff01;而且pyt…

大廠面試:MySQL篇

前言 本章內容來自B站黑馬程序員java大廠面試題和小林coding 博主學習筆記&#xff0c;如果有不對的地方&#xff0c;海涵。 如果這篇文章對你有幫助&#xff0c;可以點點關注&#xff0c;點點贊&#xff0c;謝謝你&#xff01; 1.MySQL優化 1.1 定位慢查詢 定位 一個SQL…

C++_數據結構_詳解紅黑樹

?? 歡迎大家來到小傘的大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;C學習 小傘的主頁&#xff1a;xiaosan_blog 制作不易&#xff01;點個贊吧&#xff01;&#xff01;謝謝喵&#xff01;&…

DNA復制過程3D動畫教學工具

DNA復制過程3D動畫教學工具 訪問工具頁面: DNA復制動畫演示 工具介紹 我開發了一個交互式的DNA復制過程3D動畫演示工具&#xff0c;用于分子生物學教學。這個工具直觀展示了&#xff1a; DNA雙螺旋結構的解旋過程堿基互補配對原理半保留復制機制完整的復制周期動畫 主要特點…

使用阿里云 CDN 保護網站真實 IP:完整配置指南

使用阿里云 CDN 保護網站真實 IP&#xff1a;完整配置指南 一、寶塔面板準備工作1. 確認網站部署狀態2. 寶塔中檢查網站配置 二、配置阿里云 CDN1. 添加域名到 CDN2. 配置 DNS 解析3. 配置成功確認 三、寶塔面板安全加固&#xff08;隱藏 IP 的關鍵步驟&#xff09;1. 禁止通過…

PHP經驗筆記

isset — 檢測變量是否設置,并且不是NULL; 若變量存在且值不為NULL&#xff0c;則返回 TURE 若變量存在且其值為NULL或變量不存在&#xff0c;則返回 FALSE 結論 1. 當變量為空字符串、數值0和布爾值false時&#xff0c;isset全部返回true 2. 當變量不存在和變量存在且值為NULL…

Linux——安裝NVM

1. 安裝命令 官方地址&#xff1a;https://github.com/nvm-sh/nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash2. 安裝完成后執行命令 source ~/.bashrc3. 驗證 nvm -v

CentOS 7 磁盤陣列搭建與管理全攻略

CentOS 7 磁盤陣列搭建與管理全攻略 在數據存儲需求日益增長的今天&#xff0c;磁盤陣列&#xff08;RAID&#xff09;憑借其卓越的性能、數據安全性和可靠性&#xff0c;成為企業級服務器和數據中心的核心存儲解決方案。CentOS 7 作為一款穩定且功能強大的 Linux 操作系統&am…

C++每日訓練 Day 18:構建響應式表單與數據驗證(初學者友好)

&#x1f4d8; 本篇目標&#xff1a;在前幾日協程與事件驅動機制基礎上&#xff0c;構建一個響應式表單系統&#xff0c;實現用戶輸入的異步驗證與反饋。通過協程掛起/恢復機制&#xff0c;簡化異步邏輯&#xff0c;提升代碼可讀性。 &#x1f501; 回顧 Day 17&#xff1a;響應…