Linux 下hash_map的使用

2023-10-27

http://blog.sina.com.cn/s/blog_73eb956401019cq1.html

 

Linux下使用hash_map 问题

1:头文件

#if 0
 #if __GNUC__>2
 #include <ext/hash_set>
 #include <ext/hash_map>
  using namespace __gnu_cxx;
 #else
 #include <hash_set>
 #include <hash_map>
  using namespace stdext;
 #endif

#endif

 

2:不支持string或char *为key的map 若用这个hash_map <char*, int> http_proxy_conn;

则比较时其实比较的是字符串的地址,而不是字符串本身

hash_map <string, int> http_proxy_conn等价于

hash_map <string, int, hash, equal> http_proxy_conn,后两个参数为默认系统的

解决方案:

struct str_hash
{
 size_t operator()(const string& str) const
 {
   return __stl_hash_string(str.c_str());
 }
};

struct str_equal
{
    bool operator()(const string& s1,const string& s2) const
    {
     return s1==s2;
    }
};

实现两个函数 一个是hash函数,一个是比较函数

hash_map <string, int,str_hash, str_equal> http_proxy_conn;

即可正确查找结果

 

hash_map <char *, int,str_hash, str_equal> http_proxy_conn的类型的应该也一样

 

  1. #include <ext/hash_map>   
  2. #include <iostream>   
  3. #include <cstring>   
  4.   
  5. using namespace std;    
  6. using namespace __gnu_cxx;   
  7.   
  8. struct eqstr{   
  9.     bool operator()(const char *s1, const char *s2)const{   
  10.         return strcmp(s1,s2) == 0;   
  11.     }   
  12. };   
  13.   
  14. int main(){   
  15.     hash_map<const char *,int,hash<const char *>,eqstr> months;   
  16.     months["january"] 31;   
  17.     months["february"] 28;   
  18.     months["march"] 31;   
  19.     cout << "march -> << months["march"] << endl;   
  20.  
  21. 不过没有测试

再加入类

#include <hash_map>
#include <string>
#include <iostream>
using namespace std;
//define the class
class ClassA{
public:
ClassA(int a):c_a(a){}
int getvalue()const { return c_a;}
void setvalue(int a){c_a;}
private:
int c_a;
};
//1 define the hash function
struct hash_A{
size_t operator()(const class ClassA & A)const{
//  return  hash<int>(classA.getvalue());
return A.getvalue();
}
};
//2 define the equal function
struct equal_A{
bool operator()(const class ClassA & a1, const class ClassA & a2)const{
return  a1.getvalue() == a2.getvalue();
}
};
int main()
{
hash_map<ClassA, string, hash_A, equal_A> hmap;
ClassA a1(12);
hmap[a1]="I am 12";
ClassA a2(198877);
hmap[a2]="I am 198877";
cout<<hmap[a1]<<endl;
cout<<hmap[a2]<<endl;
return 0;
}

到最后嫌麻烦,直接改成map了,可以支持string为key

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 下hash_map的使用 的相关文章

  • 如何在文件夹中的 xml 文件中 grep 一个单词

    我知道我可以使用 grep 在这样的文件夹中的所有文件中查找单词 grep rn core 但我当前的目录有很多子目录 我只想搜索当前目录及其所有子目录中存在的所有 xml 文件 我怎样才能做到这一点 我试过这个 grep rn core
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • 如何在 bash_profile 文件中添加导出语句?

    我正在尝试了解是否必须添加导出语句来在 bash profile 文件中设置变量 我该怎么做呢 例如 如果我必须添加 export AX name 那么我应该将其简单地写在文件末尾还是我还需要编写其他内容 简单写一下export AS na
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 无法连接到 Azure Ubuntu VM - 公钥被拒绝

    我们在 Azure 上使用 Ubuntu VM 一段时间了 很少遇到任何问题 然而 其中一台虚拟机最近出现了问题 出乎意料的是 Ubuntu VM 开始拒绝公钥 ssh i azure key email protected cdn cgi
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • Linux 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 用于 e NetworkManager VPN 连接的 dbus 信号处理程序

    我需要开发一些在建立 VPN 连接时执行的 python 代码 VPN 由 NetworkManager 控制 我试图弄清楚如何为此使用 NM DBUS 事件 使用 dbus monitor system 我能够识别连接信号 signal
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 如何在C程序中直接改变显存映射来绘制像素(无需库函数)

    是否可以通过使用 C 程序更改 RAM 中屏幕 视频即监视器 内存映射中的值来显示黑点 我不想使用任何库函数 因为我的主要目标是学习如何开发简单的操作系统 我尝试访问起始屏幕内存映射 即 0xA0000 在 C 中 我尝试运行该程序 但由于
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul

随机推荐

  • git中reset、restore、checkout、revert、clean的用法和区别

    1 git reset NAME git reset Reset current HEAD to the specified state SYNOPSIS git reset soft mixed N hard merge keep q
  • 通过rancher快速部署Kubernetes集群

    文章目录 概述 架构设计 Kubernetes Rancher 准备工作 安装Rancher 登录Rancher 创建K8S集群 部署工作负载 概述 What s Rancher Rancher是一套容器管理平台 它可以帮助组织在生产环境中
  • Python3.8.5版本下载步骤

    一 下载 1 进入官网地址 2 进入此界面 下滑到最后 3 点击进行下载 4 保存 等候下载完毕 二 安装 1 双击Python 3 8 5 amd64 exe进行下载 2 勾选Add选项 再选择Customize installation
  • 20分钟轻松完成2篇申请文书?ChatGPT到底是黑科技还是黑名单?

    自从ChatGPT与2022年底正式出道并走红之后 各大领域都纷纷浮现使用这款人工智能软件完成本属于人类工作的现象 如果你以为它就像手机上呼叫一声就能帮你查看天气或者设置闹钟的机器人一样那就错了 ChatGPT能够在一段对话中结合你给的信息
  • 海思3559av100 内核启动优化

    在内核目录下 使用menuconfig去裁剪内核 配置裁剪内核 make ARCH arm64 CROSS COMPILE aarch64 himix100 linux menuconfig 然后覆盖以前的配置文件 cp config ar
  • git-lfs安装及clone常见问题

    1 安装git for windows 3 20版本 报错Could not find git can not register Git LFS 错误原因 可能这个版本有问题 参考 Could not find Git can not re
  • Stata学习笔记

    今天学习的视频是 stata入门 国泰安和锐思数据下载 哔哩哔哩 bilibili up主 差点没头 stata入门 从国泰安导入数据 哔哩哔哩 bilibili 目录 1 从CSMAR下载数据 以下载年报中的数据为例 2 导入stata中
  • 网站根目录打不开服务器拒绝,检查网站打不开的三种原因

    自己做了网站之后 如果在实际访问中 出现了网站打不开的情况 怎么去查找什么原因导致了网站打不开呢 可以通过下面三个方面去检查一下到底自己做网站时哪里出现了问题 一 检查网站域名是否出问题 网站在线方式有二种 一种是租用虚拟主机 一种是服务器
  • 经济2023---风口

    改革开放以来 中国共有12次比较好的阶级跃迁的机会 包括80年代选部委院校 办乡镇企业 倒卖商品 90年代下海 选外语外贸 炒股 00年代从事资源品行业 选金融 炒房 10年代选计算机 搞互联网 买比特币 从这里面我们能总结出什么规律呢 总
  • Intellij IDEA 插件下载慢或无法查询

    由于前段时间迷上一个臊皮的idea UI doki 以下效果 在关闭掉该插件以后 出现了UI残留的现象 重装 导入以前的setting依然无法解决这个问题 只好重新下载一个干净的idea 以前的插件又得重新下载 然鹅新的idea下载到一半直
  • hssfrow 单元格样式_poi导出excel单元格中画斜线_AnyReport报表

    下面是输出excel斜线完整的示例代码 使用的poi类库为 poi 3 8 jar import java awt Color import java io FileOutputStream import org apache poi hs
  • 深度学习对模型进行微调

    首先 为什么对模型进行微调 当我们得到一个深度学习任务时 例如 一个涉及在图像数据集上训练卷积神经网络 Covnet 的任务 我们的第一直觉将是从头开始训练网络 然而 在实践中 像 Covnet 这样的深度神经网络具有大量的参数 通常在百万
  • matlab绘制二次曲线,并找出最大值位置(找出两曲线的最大差值点)

    绘制二次曲线源代码及方法如何用matlab画Y X 2的图啊 百度知道 画出函数曲线后 找出最大值点的坐标 求助 matlab画曲线后 求其上面最大值那一点的坐标 百度知道 ymax tp max y y为你的图形中纵坐标显示的变量名 ym
  • pnpm全局安装nodejs异常

    准备使用pnpm管理nodejs 但是设置了nodejs安装路径之后 nodejs就无法安装了o o C Users 用户名 AppData Local pnpm config rc 中删除nodejs的配置 将rc的global bin
  • Robot Framework做UI自动化测试

    Selenium2Library库安装与配置 selenium是一款用于Web应用程序测试的工具 它支持多平台 多语言 多浏览器去实现自动化测试 针对robot framework的库有两个 SeleniumLibrary和Selenium
  • Vue 组件注册

    Vue 组件注册 我们先来看一下什么是组件 Vue js的组件就是提高重用性的 让代码可复用 下面是一个Vue组件的示例 现在可以不用理解下面的代码 div div
  • PowerShell 中激活anaconda的虚拟python环境

    win10 系统下 安装python 通常选择anaconda 也会面临使用PowerShell的情况 但是Power Shell和anaconda的虚拟环境不配合 无法激活 在anaconda中创建虚拟python环境 conda cre
  • 2021年Java开发爆款推荐!1200页文档笔记,高级面试题+解析

    前言 对Java开发的知识点进行深入的学习 并打算做成系列 先从基础常用的重点 面试点 知识开始 后续会陆续扩展 加油 涉及到底层的可能代码块会多点 但要学习底层不看代码看啥 代码说明一切 放心 基本上每句代码都会写上注释 若有不对请指出
  • mysql 利用binlog增量备份,还原实例

    mysql 利用binlog增量备份 还原实例 2011 09 08 09 52 58 分类 Mysql postgreSQL 一 什么是增量备份 增量备份 就是将新增加的数据进行备份 假如你一个数据库 有10G的数据 每天会增加10M的数
  • Linux 下hash_map的使用

    http blog sina com cn s blog 73eb956401019cq1 html Linux下使用hash map 问题 1 头文件 if 0 if GNUC gt 2 include