CPP 做算法题时常用的容器技巧
2023-03-07 09:49:38 时间
整理了一下 CPP 做算法题时常用的容器技巧。遇到一门新语言时,我首先都会思考如何实现下属功能。关于算法的笔记放在 GitHub[1] 上。
定长数组
- 数组
变长数组
- vector
哈希表
- 有序字典
优先队列
- 优先队列重载
排序
- 排序返回索引
定长数组
要求:
- 声明与取数
数组
- int dx[4] = {0, 1, 0, -1};
- int a[N];
- dx[0];
变长数组
要求:
- 取值:取头取尾取索引
- 追加
- 掐头去尾
vector
- vector<int> ans(n); // 初始长度 n ,默认值为 0
- // 取值:取头取尾取索引
- ans.front();
- ans.back();
- ans[i] += 1;
- // 追加
- // 为什么 std::vector 不支持 push_front? - Milo Yip的回答 - 知乎
- // https://www.zhihu.com/question/51555037/answer/126373709
- ans.push_back(5); // O(1)
- // 去尾
- ans.pop_back();
哈希表
要求:
- 键值已存在
- 有序字典
- map<int, int> S;
- // 键值已存在
- if (S.count(5))
- // S[5] 被定义过
- else
- // S[5] 未被定义过
有序字典
- map 有序,基于红黑树
- unordered_map 无序,基于映射,效率可能更高
优先队列
要求:
- 空尺看存弹
- 重载存储对象
- 重载比较函数
- // 默认是大根堆
- priority_queue<int> heap;
- // 改为小根堆
- priority_queue<int, vetor<int>, greater<int> > min_heap;
- // 空尺看存弹
- heap.empty();
- heap.size();
- heap.top();
- heap.push(5);
- heap.pop();
优先队列重载
- // 重载比较函数
- struct cmp {
- template<typename T, typename U>
- bool operator()(T const& left, U const &right) {
- if (left.second < right.second) return true;
- return false;
- }
- };
- int main() {
- unordered_map<int, int> mp;
- mp[3] = 4;
- mp[2] = 44;
- mp[12] = 432;
- // 重载存储对象 pair<int, int>
- priority_queue<pair<int, int>, vector<pair<int, int>>, cmp> pq(mp.begin(), mp.end()); //完成pq的初始化
- }
- // 版权声明:本文为CSDN博主「leagalhigh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- // 原文链接:https://blog.csdn.net/u014257954/article/details/78623215
排序
要求:
- 重载排序规则
- 排序返回索引
- vector<int> ans;
- sort(ans.begin(), ans.end()); // 默认从小到大
- vector<pair<int, int>> res;
- sort(res.begin(), res.begin()); // 默认比较第一个元素
排序返回索引
- vector<int> data = {5, 16, 4, 7};
- vector<int> index(data.size(), 0);
- for (int i = 0 ; i != index.size() ; i++) {
- index[i] = i;
- }
- sort(index.begin(), index.end(),
- [&](const int& a, const int& b) {
- return (data[a] < data[b]);
- }
- );
- for (int i = 0 ; i != index.size() ; i++) {
- cout << index[i] << endl;
- }
- // 版权声明:本文为CSDN博主「liangbaqiang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- // 原文链接:https://blog.csdn.net/qq_36523492/article/details/114122256
参考资料
[1]算法的笔记: https://github.com/PiperLiu/ACMOI_Journey
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的