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

建设网站的账务处理seo公司杭州

建设网站的账务处理,seo公司杭州,网页布局类型,软文新闻发布网站探索 C 中的映射与查找表 在 C 编程中,映射(Map)和查找表(Lookup Table)是非常重要的数据结构,它们能够高效地存储和检索数据,帮助我们解决各种实际问题。今天,我们就来深入探讨一下…

探索 C++ 中的映射与查找表
在 C++ 编程中,映射(Map)和查找表(Lookup Table)是非常重要的数据结构,它们能够高效地存储和检索数据,帮助我们解决各种实际问题。今天,我们就来深入探讨一下如何在 C++ 中实现这些数据结构,包括使用矢量(Vector)实现映射以及使用哈希(Hash)实现 hashMap 类。

一、使用矢量实现映射 矢量(std::vector)是 C++ 标准库中的一个强大的容器,我们可以借助它来实现简单的映射功能。

#include <iostream>
#include <vector>
#include <utility>
#include <stdexcept>template <typename Key, typename Value>
class VectorMap {
private:std::vector<std::pair<Key, 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 <vector>template <typename T>
class LookupTable {
private:std::vector<T> 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 <functional>template <typename Key, typename Value>
class HashMap {
private:std::vector<std::list<std::pair<Key, Value>>> buckets;size_t size_;// 哈希函数size_t hash(const Key& key) const {std::hash<Key> 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.yayakq.cn/news/435336/

相关文章:

  • iis7搭建网站教程设计师网页设计作品
  • 重庆博达建设集团网站海南科技职业大学教务网络管理系统
  • 来宾绍兴seo网站托管方案建立个人网站能赚钱吗
  • 网站服务器有哪些种类小程序免费制作
  • 公司网站开发费用计入什么科目新网站seo外包
  • 丹东做网站公司wordpress 查看文章
  • 织梦移动网站模板哪里的郑州网站建设
  • 石家庄信息门户网站制作费用抖音企业推广费用
  • 网站快照明天更新是什么情况建筑网官网平台
  • 南京哪家网站建设好小城市做网站
  • 免费建站系统个人泉州做网站优化
  • 做网站用jsp还是html在Vs中做网站接口
  • 网站可以不备案php双语网站源码
  • 昌吉网站建设公司企业展厅设计公司大型
  • 制作网站是什么专业郑州高端网站建设团队
  • 购买域名后怎么做网站省建设厅官网
  • html5网站开发公司站长之家
  • 建站网站推荐生成短链接的工具
  • 网站空间 上传程序深圳建立网站营销
  • 北仑做网站网站与客户端的区别吗
  • 湖州市吴兴区建设局网站做阿里巴巴企业网站
  • 怎么做像小刀网一样的网站品牌建设内容
  • 论坛网站模板下载大唐集团电子商务平台
  • 腕表手表网站网上如何推广产品
  • 商丘网站优化公司wordpress更新定位插件
  • 移动网站建设公司wordpress还原回收站
  • 域名交易网站哪个好东莞企业网站哪家好
  • 洛阳做网站哪家专业公众号 wordpress
  • 网站如何做信息表网站突然不能访问
  • 做网站开发工具哪个好广西住房和城乡建设厅继续教育网