CMap常用函數

CMap 是 MFC 中用于存儲鍵值對(key-value)的關聯容器類,類似于 C++ 標準庫中的 std::map,但依賴 MFC 框架實現。它采用哈希表(Hash Table)作為底層數據結構,支持高效的鍵值查找、插入和刪除操作。以下是 CMap 的常用函數及用法示例:

一、基本定義與初始化

CMap 是模板類,聲明時需指定“鍵類型”和“值類型”:

// 聲明:CMap<鍵類型, 鍵參數類型, 值類型, 值參數類型>
// 注:參數類型通常與鍵/值類型一致(除了對象類型需用引用)
CMap<CString, LPCTSTR, int, int> mapStrToInt;  // 鍵:CString,值:int
CMap<int, int, CString, LPCTSTR> mapIntToStr;  // 鍵:int,值:CString

二、插入元素(添加鍵值對)

使用 SetAt 方法插入或更新鍵值對:

// 插入:若鍵不存在則新增,若已存在則更新值
mapStrToInt.SetAt(_T("Apple"), 10);   // "Apple" → 10
mapStrToInt.SetAt(_T("Banana"), 20);  // "Banana" → 20// 插入 int→CString 類型
mapIntToStr.SetAt(1, _T("Monday"));   // 1 → "Monday"
mapIntToStr.SetAt(2, _T("Tuesday"));  // 2 → "Tuesday"

三、查找元素(根據鍵獲取值)

通過 Lookup 方法查找鍵對應的值,返回 BOOL 表示是否找到:

// 查找 CString→int 映射
int nValue;
if (mapStrToInt.Lookup(_T("Apple"), nValue))  // 查找鍵 "Apple"
{TRACE(_T("找到值:%d\n"), nValue);  // 輸出:10
}// 查找 int→CString 映射
CString strValue;
if (mapIntToStr.Lookup(1, strValue))  // 查找鍵 1
{TRACE(_T("找到值:%s\n"), strValue);  // 輸出:Monday
}

四、刪除元素

  • RemoveKey:刪除指定鍵的鍵值對
  • RemoveAll:清空整個映射表
// 刪除單個鍵值對
mapStrToInt.RemoveKey(_T("Banana"));  // 刪除 "Banana" 對應的鍵值對// 清空所有元素
mapIntToStr.RemoveAll();  // 清空 mapIntToStr

五、遍歷所有鍵值對

CMap 通過 POSITION 迭代器遍歷,需結合 GetStartPositionGetNextAssoc 方法:

// 遍歷 CString→int 映射
POSITION pos = mapStrToInt.GetStartPosition();  // 獲取起始位置
while (pos != NULL)
{CString strKey;int nValue;// 獲取當前鍵值對,并移動到下一個位置mapStrToInt.GetNextAssoc(pos, strKey, nValue);TRACE(_T("鍵:%s,值:%d\n"), strKey, nValue);
}// 遍歷結果(假設未刪除元素):
// 鍵:Apple,值:10
// 鍵:Banana,值:20

六、其他常用函數

函數功能說明示例
GetCount返回鍵值對的數量int nCount = mapStrToInt.GetCount();
IsEmpty判斷映射表是否為空if (mapStrToInt.IsEmpty()) { ... }
operator []簡化插入/訪問(類似數組),僅部分版本支持mapStrToInt[_T("Orange")] = 30;
Lookup 失敗處理未找到時返回默認值(需手動判斷)見“查找元素”示例

七、注意事項

  1. 鍵的唯一性CMap 中鍵必須唯一,重復插入相同鍵會覆蓋原有值(SetAt 方法的特性)。
  2. 哈希表特性:遍歷順序與插入順序無關(哈希表不保證順序),若需有序遍歷,建議使用 CMapStringToOb 或標準庫 std::map
  3. 類型匹配:模板參數需嚴格匹配(尤其是字符串類型,CString 對應 LPCTSTR 作為參數類型)。
  4. 內存管理CMap 會自動管理內部存儲的鍵值對內存,銷毀對象時無需手動釋放。
  5. 性能:哈希表的查找、插入、刪除效率均為 O(1)(平均情況),適合存儲大量鍵值對。

總結

CMap 是 MFC 中高效的鍵值對管理工具,核心功能圍繞“插入(SetAt)、查找(Lookup)、刪除(RemoveKey)、遍歷(GetNextAssoc)”展開。它適合需要快速根據鍵獲取值的場景(如配置表、緩存數據),但需注意其無序性和鍵的唯一性約束。

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

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

相關文章

Rocky9.0去堆疊雙發arp(支持“ARP 廣播雙發”)

摘要 在去堆疊/MLAG 場景下&#xff0c;默認 bonding 只會以單口回復 ARP&#xff0c;另一臺交換機收不到 ARP Reply。本文在 Linux bonding 驅動中增加參數 arp_broadcast_mode&#xff0c;當開啟時對 ARP 包臨時切換到 廣播模式&#xff0c;實現雙口同時發 ARP Reply。文內提…

網頁連接攝像頭

攝像機處理 <!-- camera_solve.html --> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>…

FPGA雷達信號處理之:自適應門限閾值

一、原理 參考這個博主&#xff0c;講的很仔細&#xff1a;基于脈沖功率的雷達脈沖參數檢測原理詳解 二、FPGA實現 使用system generator搭建算法模型如下&#xff1a; 在這里&#xff0c;濾波器窗長度為8&#xff0c;原博主設置為50效果更好&#xff0c;門限公式如下&#xf…

Vue 中實現選中文本彈出彈窗的完整指南

在現代 Web 應用中&#xff0c;選中文本后顯示相關操作或信息是一種常見的交互模式。本文將詳細介紹如何在 Vue 中實現選中文本后彈出彈窗的功能&#xff0c;包括其工作原理、多種實現方式以及實際項目中的應用示例。 一、實現原理 1. 文本選中檢測機制 瀏覽器提供了 Select…

第4節-排序和限制-FETCH

摘要: 在本教程中&#xff0c;你將學習如何使用 PostgreSQL 的 FETCH 子句從查詢中檢索部分行。 PostgreSQL FETCH 簡介 在 PostgreSQL 中&#xff0c;OFFSET 子句的作用類似于 LIMIT 子句。FETCH 子句允許你限制查詢返回的行數。 LIMIT 子句并非 SQL 標準的一部分。不過&#…

洛谷 P2680 [NOIP 2015 提高組] 運輸計劃(二分答案 + 樹上差分)

題目鏈接題目概括與評價 很經典&#xff0c;突破口藏的很深&#xff0c;求最小值這里&#xff0c;是問題切入點&#xff0c;想到用二分答案&#xff0c;然后思考怎么寫 f_check 函數。二分答案樹上差分。代碼 #include <iostream> #include <vector> #include <…

接力鄧承浩,姜海榮能講好深藍汽車新故事嗎?

出品 | 何璽排版 | 葉媛深藍汽車迎來新話事人。9月5日&#xff0c;新央企長安汽車旗下品牌深藍汽車傳出新的人事調整。多家業內媒體報道稱&#xff0c;榮耀前中國區CMO姜海榮已正式加入長安汽車&#xff0c;并出任旗下深藍汽車CEO一職。原CEO鄧承浩則升任深藍汽車董事長&#x…

esp32-c3寫一個收集附近 WiFi 和藍牙信號通過

下面給你一個基于 ESP-IDF(v5.x) 的完整示例&#xff1a;在 ESP32-C3 上同時掃描附近 Wi-Fi 與藍牙&#xff08;BLE&#xff09;廣播&#xff0c;把結果以 JSON 結構統一輸出到串口&#xff0c;并且可可選通過 MQTT 上報到服務器&#xff08;打開一個宏即可&#xff09;。日志默…

文心大模型 X1.1:百度交出的“新深度思考”答卷

文心大模型 X1.1&#xff1a;百度交出的“新深度思考”答卷 2025年9月9日&#xff0c;WAVE SUMMIT 2025深度學習開發者大會在北京正式召開&#xff0c;由深度學習技術及應用國家工程研究中心主辦&#xff0c;百度飛槳與文心大模型聯合承辦。大會上&#xff0c;百度正式發布了基…

開始 ComfyUI 的 AI 繪圖之旅-Flux.1圖生圖(八)

文章標題一、Flux Kontext Dev1.關于 FLUX.1 Kontext Dev1.1 版本說明1.2 工作流說明1.3 模型下載2.Flux.1 Kontext Dev 工作流2.1 工作流及輸入圖片下載2.2 按步驟完成工作流的運行3.Flux Kontext 提示詞技巧3.1 基礎修改3.2 風格轉換3.3 角色一致性3.4 文本編輯4.常見問題解決…

Java 生成微信小程序二維碼

1. java 二維碼生成工具類import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import com.pdatao.api.controller.file.FileController; import com.pdatao.api.error.CommunityException; import org.apache.commons.io.IOUtils; import org.springframe…

智慧健康觸手可及:AI健康小屋——未來健康管理的全能守護者

AI健康小屋&#xff0c;這座融合人工智能、物聯網與醫療科技的“健康堡壘”&#xff0c;正悄然重構健康管理生態。它以科技為引擎&#xff0c;將專業醫療資源下沉至社區、企業、家庭&#xff0c;通過智能檢測、精準分析、個性化干預&#xff0c;實現從疾病治療到主動預防的健康…

[工作表控件19] 驗證規則實戰:如何用正則表達式規范業務輸入?

在企業應用中,數據準確性至關重要。工作表控件通過“驗證規則”能力,支持在文本字段和附件字段中使用正則表達式(RegEx)進行格式校驗。它能幫助開發者輕松實現郵箱、身份證號、車牌號、URL 等格式的高效驗證,大幅提升數據質量與表單使用體驗。 一、官方功能介紹與基礎能力…

uniapp分包實現

關于分包優化的說明 在對應平臺的配置下添加"optimization":{"subPackages":true}開啟分包優化 目前只支持mp-weixin、mp-qq、mp-baidu、mp-toutiao、mp-kuaishou的分包優化 分包優化具體邏輯&#xff1a; 靜態文件&#xff1a;分包下支持 static 等靜態…

ctfshow_web14------(PHP+switch case 穿透+SQL注入+文件讀取)

題目&#xff1a;解釋&#xff1a;$c intval($_GET[c]); //獲取整數值 6sleep($c);//延遲執行當前腳本若干秒。提示一下哈沒有break會接著執行下面的但是像是44444&#xff0c;555555,sleep的時間太久我們用3進入here_1s_your_f1ag.php是一個查詢頁面&#xff0c;sql注入查看源…

linux x86_64中打包qt

下載安裝 地址: Releases linuxdeploy/linuxdeploy mv linuxdeploy-x86_64.AppImage linuxdeployqtchmod 777 linuxdeployqtsudo mv linuxdeployqt /usr/local/bin/linuxdeployqt --version報錯 Applmage默認依賴FUSE&#xff0c;需要掛載自身為虛擬文件系統才能運行, ubuntu…

華為昇騰CANN開發實戰:算子自定義與模型壓縮技術指南

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;注冊即送-H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 摘要 隨著人工智能技術的飛速發展&#xff0c;越來越多…

Vue3源碼reactivity響應式篇之reactive響應式對象的track與trigger

概覽 在BaseReactiveHandler類的get方法中&#xff0c;有如下代碼塊if (!isReadonly2){track(target, "get", key);}&#xff0c;這表示通過reactive、shallowReactive創建的響應式對象&#xff0c;非只讀的&#xff0c;當讀取代理對象proxyTarget的某個屬性key時&am…

VRRP 多節點工作原理

VRRP 多節點工作原理 基本概念 VRRP 的設計初衷是給一組節點提供一個 虛擬路由器&#xff0c;對外只表現出一個 VIP。協議規定&#xff1a;同一個 VRRP 實例 下始終只有 一個 Master 持有 VIP&#xff0c;其它全部是 Backup。 Master → 持有 VIP&#xff0c;負責轉發流量到Mas…

Gradio全解11——Streaming:流式傳輸的視頻應用(9)——使用FastRTC+Gemini創建沉浸式音頻+視頻的藝術評論家

Gradio全解11——Streaming&#xff1a;流式傳輸的視頻應用&#xff08;9&#xff09;——使用FastRTCGemini創建沉浸式音頻視頻的藝術評論家11.9 使用FastRTCGemini創建實時沉浸式音頻視頻的藝術評論家11.9.1 準備工作及音頻圖像編碼器1. 項目說明及準備工作2. 音頻和圖像編碼…