当前位置: 首页 > news >正文

镇江网站搜索引擎优化北京网站建设优化学校

镇江网站搜索引擎优化,北京网站建设优化学校,邢台168交友最新信息,网站的后台怎么做的探索 C 中的映射与查找表 在 C 编程中#xff0c;映射#xff08;Map#xff09;和查找表#xff08;Lookup Table#xff09;是非常重要的数据结构#xff0c;它们能够高效地存储和检索数据#xff0c;帮助我们解决各种实际问题。今天#xff0c;我们就来深入探讨一下…探索 C 中的映射与查找表 在 C 编程中映射Map和查找表Lookup Table是非常重要的数据结构它们能够高效地存储和检索数据帮助我们解决各种实际问题。今天我们就来深入探讨一下如何在 C 中实现这些数据结构包括使用矢量Vector实现映射以及使用哈希Hash实现 hashMap 类。 一、使用矢量实现映射 矢量std::vector是 C 标准库中的一个强大的容器我们可以借助它来实现简单的映射功能。 #include iostream #include vector #include utility #include stdexcepttemplate typename Key, typename Value class VectorMap { private:std::vectorstd::pairKey, Value data;// 查找键的位置int find(const Key key) const {for (size_t i 0; i data.size(); i) {if (data[i].first key) {return i;}}return -1;}public:VectorMap() {}// 插入键值对void insert(const Key key, const Value value) {int index find(key);if (index -1) {data.push_back(std::make_pair(key, value));} else {data[index].second value;}}// 获取值Value operator[](const Key key) {int index find(key);if (index -1) {data.push_back(std::make_pair(key, Value()));return data.back().second;}return data[index].second;}// 删除键值对void erase(const Key key) {int index find(key);if (index! -1) {data.erase(data.begin() index);}}// 判断键是否存在bool contains(const Key key) const {return find(key)! -1;}// 获取映射大小size_t size() const {return data.size();}// 清空映射void clear() {data.clear();}// 检查映射是否为空bool empty() const {return data.empty();}- [ ] List item };在这个 VectorMap 类中我们使用一个 std::vector 来存储键值对std::pair。find 函数用于查找给定键在向量中的位置如果未找到则返回 -1。insert 函数根据键是否已存在来决定是插入新的键值对还是更新已有键的值。operator[] 函数提供了方便的访问方式类似于 std::map 的操作如果键不存在则会插入一个默认值并返回其引用。erase 函数用于删除指定键的键值对contains 函数用于判断键是否存在于映射中其他函数则用于获取映射的大小、清空映射以及检查映射是否为空。 二、查找表 查找表是一种用于快速查找数据的数据结构我们可以使用 std::vector 来简单实现一个查找表。 #include iostream #include vectortemplate typename T class LookupTable { private:std::vectorT data;public:LookupTable() {}// 插入元素void insert(const T value) {data.push_back(value);}// 查找元素bool contains(const T value) const {for (const T element : data) {if (element value) {return true;}}return false;}// 获取查找表大小size_t size() const {return data.size();}// 清空查找表void clear() {data.clear();}// 检查查找表是否为空bool empty() const {return data.empty();} };这个 LookupTable 类非常简单它提供了插入元素、查找元素以及获取查找表大小、清空查找表和检查查找表是否为空的功能。插入元素就是将元素添加到 std::vector 中查找元素则是遍历向量来判断是否存在给定元素。 三、哈希实现 hashMap 类 哈希表是一种高效的查找数据结构通过哈希函数将键映射到桶Bucket中每个桶可以存储多个键值对。下面是使用哈希实现 hashMap 类的代码 #include iostream #include vector #include list #include utility #include functionaltemplate typename Key, typename Value class HashMap { private:std::vectorstd::liststd::pairKey, Value buckets;size_t size_;// 哈希函数size_t hash(const Key key) const {std::hashKey hasher;return hasher(key) % buckets.size();}public:HashMap(size_t bucket_count 10) : size_(0) {buckets.resize(bucket_count);}// 插入键值对void insert(const Key key, const Value value) {size_t index hash(key);for (auto pair : buckets[index]) {if (pair.first key) {pair.second value;return;}}buckets[index].push_back(std::make_pair(key, value));size_;}// 获取值Value operator[](const Key key) {size_t index hash(key);for (auto pair : buckets[index]) {if (pair.first key) {return pair.second;}}buckets[index].push_back(std::make_pair(key, Value()));size_;return buckets[index].back().second;}// 删除键值对void erase(const Key key) {size_t index hash(key);auto bucket buckets[index];for (auto it bucket.begin(); it! bucket.end(); it) {if (it-first key) {bucket.erase(it);size_--;return;}}}// 判断键是否存在bool contains(const Key key) const {size_t index hash(key);for (const auto pair : buckets[index]) {if (pair.first key) {return true;}}return false;}// 获取映射大小size_t size() const {return size_;}// 清空映射void clear() {buckets.clear();size_ 0;}// 检查映射是否为空bool empty() const {return size_ 0;} };***在 HashMap 类中我们使用一个 std::vector 来存储桶每个桶是一个 std::list用于解决哈希冲突。hash 函数使用 std::hash 函数将键映射到桶的索引。insert 函数首先根据哈希值找到对应的桶然后查找键是否已存在 如果存在则更新值否则将新的键值对插入到桶中。operator[] 函数类似地先查找键如果不存在则插入默认值并返回其引用。erase 函数用于删除指定键的键值对contains 函数用于判断键是否存在于哈希表中其他函数用于获取哈希表的大小、清空哈希表以及检查哈希表是否为空。* *通过以上三种实现方式我们可以根据不同的场景选择合适的数据结构来满足需求。矢量实现的映射简单直观适用于数据量较小且对性能要求不高的情况查找表则侧重于快速判断元素是否存在 而哈希实现的 hashMap 类在处理大量数据时具有较高的查找效率但需要注意哈希冲突的处理和哈希函数的选择。在实际编程中我们可以根据数据的特点和操作的频繁程度来灵活运用这些数据结构以提升程序的性能和效率。*** 希望这篇文章能够帮助大家更好地理解 C 中的映射和查找表的实现方式如果你有任何问题或建议欢迎在评论区留言。
http://www.hkea.cn/news/14445018/

相关文章:

  • 外网服装设计网站深圳成豪设计
  • wordpress 流量监控360优化大师最新版的功能
  • 甘孜建设机械网站首页建网站来做什么
  • 网站的模板演示怎么做两阳夹一阴后续走势
  • 网站开发是什么职位免费一键生成商标图片
  • 无形资产 网站建设wordpress 会员插件
  • 企业网站建设课程体会一级建造师求职平台
  • 有哪些公司的网站做的比较好网站建设与维护面试
  • 配色设计网站推荐烟台公司网站定制
  • wordpress子站点404网站icp备案证书下载
  • 哪个网站可以做鸟瞰图照明做外贸的有那些网站
  • 一个做炉石视频的网站国外网站推广平台有哪些
  • 建一个图片类网站需要多少钱网站备案查询怎么查
  • 智能建站设计国外免费源码共享网站
  • 企业如何免费做网站投资公司经营范围
  • 宁波网站制作哪家强流感用什么药更好
  • 长春建站方案什么是网站主机
  • 建站快车凡科西安网站设计培训试听
  • 已备案网站域名网网站模板拍卖
  • 泰州专业制作网站wordpress中文主程序优化
  • 医疗整形网站怎么做当今做网站的语言有哪些
  • vps 同时做ssh和做网站金乡网站建设多少钱
  • 北京网站建设学校ui交互设计是什么意思呢
  • 网站建设寮步摄影设计说明300字
  • 龙港哪里有做百度网站的软件制作视频
  • 建设网站论坛都需要哪些工具网站建设平台计划书
  • 简洁大气蓝色文章资讯网站企业管理咨询是做什么
  • 做只在自己电脑上的网站前端开发工程师招聘信息
  • 天津餐饮网站建设广东购物网站建设哪家好
  • 网站设计与运营广西排名前十的模板厂