抚州城乡建设厅网站,建设局官网查询,服装外包加工网,短视频免费素材网站CMap 是 MFC 中用于存储键值对#xff08;key-value#xff09;的关联容器类#xff0c;类似于 C 标准库中的 std::map#xff0c;但依赖 MFC 框架实现。它采用哈希表#xff08;Hash Table#xff09;作为底层数据结构#xff0c;支持高效的键值查找、插入和删除操作。…CMap 是 MFC 中用于存储键值对key-value的关联容器类类似于 C 标准库中的 std::map但依赖 MFC 框架实现。它采用哈希表Hash Table作为底层数据结构支持高效的键值查找、插入和删除操作。以下是 CMap 的常用函数及用法示例
一、基本定义与初始化
CMap 是模板类声明时需指定“键类型”和“值类型”
// 声明CMap键类型, 键参数类型, 值类型, 值参数类型
// 注参数类型通常与键/值类型一致除了对象类型需用引用
CMapCString, LPCTSTR, int, int mapStrToInt; // 键CString值int
CMapint, 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 迭代器遍历需结合 GetStartPosition 和 GetNextAssoc 方法
// 遍历 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 失败处理未找到时返回默认值需手动判断见“查找元素”示例七、注意事项
键的唯一性CMap 中键必须唯一重复插入相同键会覆盖原有值SetAt 方法的特性。哈希表特性遍历顺序与插入顺序无关哈希表不保证顺序若需有序遍历建议使用 CMapStringToOb 或标准库 std::map。类型匹配模板参数需严格匹配尤其是字符串类型CString 对应 LPCTSTR 作为参数类型。内存管理CMap 会自动管理内部存储的键值对内存销毁对象时无需手动释放。性能哈希表的查找、插入、删除效率均为 O(1)平均情况适合存储大量键值对。
总结
CMap 是 MFC 中高效的键值对管理工具核心功能围绕“插入SetAt、查找Lookup、删除RemoveKey、遍历GetNextAssoc”展开。它适合需要快速根据键获取值的场景如配置表、缓存数据但需注意其无序性和键的唯一性约束。