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

哈希表实现

C++ 容器类 <set>

#include <bits/stdc++.h>
using namespace std;int main()
{set<int> myset;int q;cin >> q;while(q--){char c;int num;cin >> c >> num;if(c=='I'){myset.insert(num);}if(c=='Q'){if(myset.find(num)!=myset.end())cout <<"Yes" <<endl;elsecout <<"No" <<endl;}}return 0;
}
#include <bits/stdc++.h>
using namespace std;int main()
{set<int> myset;int q;cin >> q;while(q--){char c;int num;cin >> c >> num;if(c=='I'){myset.insert(num);}if(c=='Q'){if (myset.count(x)) {cout << "YES" << endl;}else {cout << "NO" << endl;}}}return 0;
}

C++ 容器类 <set> | 菜鸟教程

myset.count(x) 是 STL 容器(比如 setunordered_set)中用来判断某个元素是否存在的一种方式。

对于 set / unordered_set 来说:

myset.count(x)

返回的是 01

  • 0 表示元素 x 不在集合中。

  • 1 表示元素 x 存在于集合中。

注意:set 里面的元素是唯一的,所以不会返回大于 1 的值。

  • set 的底层是 红黑树(平衡二叉搜索树)

  • 每插入一个元素时,会自动检查这个元素是否已经存在。

  • 如果存在,就不会插入。

C++ 容器类 <map>

C++ 容器类 <map> | 菜鸟教程

#include <bits/stdc++.h>
using namespace std;int main()
{map<int,bool> mymap;int q;cin >> q;while(q--){char c;int num;cin >> c >> num;if(c=='I'){mymap[num]=true;}if(c=='Q'){cout << ( mymap.count(num) ?"Yes":"No" ) << endl;}}return 0;
}#include <bits/stdc++.h>
using namespace std;int main()
{map<int,bool> mymap;int q;cin >> q;while(q--){char c;int num;cin >> c >> num;if(c=='I'){mymap[num]=true;}if(c=='Q'){if(mymap.find(num)!= mymap.end())cout<< "Yes"<<endl;elsecout<< "No"<<endl;}}return 0;
}

map 示例(自动排序):

map<string, int> mp;
mp["apple"] = 5;
mp["banana"] = 3;
mp["orange"] = 7;for (auto& p : mp) {cout << p.first << ": " << p.second << endl;
}

输出:

apple: 5
banana: 3
orange: 7
 

unordered_map 示例(无序):

unordered_map<string, int> ump;
ump["apple"] = 5;
ump["banana"] = 3;
ump["orange"] = 7;for (auto& p : ump) {cout << p.first << ": " << p.second << endl;
}

输出:顺序不固定

orange: 7
apple: 5
banana: 3
 

map<string, int> mp;
mp["app"] = 1;
mp["apple"] = 2;
mp["apricot"] = 3;
mp["banana"] = 4;

排序结果:

app
apple
apricot
banana


map<string, int> 会根据字符串的**字典序(lexicographical order)**对键排序,本质上就是按每个字符的 ASCII 值从左到右逐一比较。

  • appapple,前 3 个字符一样,app 更短,所以排前。

  • apple vs apricot:前 2 个字符一样,第 3 个是 p(112) vs r(114),所以 apple < apricot

  • banana 的首字母是 b(98),而前面全是 a(97),所以最后。

示例:按字符串长度排序的 map

#include <bits/stdc++.h>
using namespace std;// 自定义比较器(仿函数)
struct cmp {bool operator()(const string& a, const string& b) const {return a.length() < b.length(); // 长度小的在前}
};int main() {map<string, int, cmp> mymap;mymap["apple"] = 5;mymap["banana"] = 3;mymap["kiwi"] = 10;mymap["pear"] = 2;for (auto& p : mymap) {cout << p.first << ": " << p.second << endl;}return 0;
}

输出结果(按字符串长度从小到大):

kiwi: 10     // 4
pear: 2      // 4
apple: 5     // 5
banana: 3    // 6
 

struct cmp {bool operator()(const string& a, const string& b) const {return a.length() < b.length();}
};

#include <bits/stdc++.h>
using namespace std;// 普通函数作为比较器
bool cmp(const string& a, const string& b) {return a.length() < b.length();
}int main() {map<string, int, bool(*)(const string&, const string&)> mymap(cmp);mymap["apple"] = 5;mymap["kiwi"] = 10;mymap["banana"] = 3;for (auto& p : mymap) {cout << p.first << ": " << p.second << endl;}return 0;
}

输出结果:

kiwi: 10
apple: 5
banana: 3

先按字符串长度升序,如果长度一样就按字典序升序排列。

#include <bits/stdc++.h>
using namespace std;// 比较器
struct cmp{bool operator()(const string& a ,const string& b) const {if(a.size()==b.size())return a<b;elsereturn a.size() < b.size();}
};int main() {map<string, int,cmp> mymap;mymap["apple"] = 5;mymap["kiwi"] = 10;mymap["pear"] = 8;mymap["grape"] = 6;mymap["banana"] = 3;mymap["mango"] = 7;for (auto& [ zifu , shuzi  ] : mymap) {cout << zifu << ": " << shuzi << endl;}return 0;
}
#include <bits/stdc++.h>
using namespace std;// 设定比较器
bool cmp(const string& a, const string& b) {if (a.length() == b.length())return a < b; // 字典序return a.length() < b.length();
}int main() {map<string, int, bool(*)(const string&, const string&)> mymap(cmp);mymap["apple"] = 5;mymap["kiwi"] = 10;mymap["pear"] = 8;mymap["grape"] = 6;mymap["banana"] = 3;mymap["mango"] = 7;for (auto& p : mymap) {cout << p.first << ": " << p.second << endl;}return 0;
}

输出结果:

kiwi: 10
pear: 8
apple: 5
grape: 6
mango: 7
banana: 3

 map<string, int, bool(*)(const string&, const string&)> mymap(cmp);

创建一个键为 string,值为 int 的 map,它的排序规则由我们定义的函数 cmp 控制(通过函数指针传入)。

相关文章:

  • 微前端框架 Wujie
  • python3GUI--仿网课答题播放器 By:PyQt5(分享)
  • System.out 详解
  • ts与面向对象
  • trivy开源安全漏洞扫描器——筑梦之路
  • 操作系统:进程是一个非常重要的抽象概念
  • QML 样式库
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类尺寸QSizeF)
  • Java发生OOM是否必然导致JVM退出
  • 【工具变量】A股上市企业数据资产披露水平数据集(2000-2023年)
  • 8.QT-按钮类控件|Push Button|Radio Button|Check Box|Tool Button(C++)
  • 提交bug单时,应该说明哪些信息?
  • 强制重装及验证onnxruntime-gpu是否正确工作
  • 借助 OpenCV 和 PyTorch 库,利用卷积神经网络提取图像边缘特征
  • C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)
  • HTTP 2.0 和 3.0 的区别
  • DSN主从同步
  • Linux系统中iptables防火墙
  • 松灵Cobot Magic双臂具身遥操机器人(基于ROS的定位建图与协同导航技术)
  • DeepSeek 即将联合 vLLM 开源推理引擎
  • 商标乱象调查:“120W”充电器功率仅12W,120W为商标名
  • 一夜跌去200美元,黄金巨震冲上热搜!涨势已近尾声?
  • 从神舟五号到神舟二十号,每次任务标识藏着哪些逐梦星辰的密码
  • 广汽全域赋能,领程皮卡概念车重磅登陆上海车展
  • 依托空域优势,浦江镇将建设上海首个“低空融合飞行示范区”
  • 著名水声学家陆佶人逝世,曾参加我国第一代核潜艇主动声纳研制