0

0

c++23的std::flat_map和std::flat_set_c++基于vector的高性能关联容器

穿越時空

穿越時空

发布时间:2025-12-03 10:29:02

|

777人浏览过

|

来源于php中文网

原创

std::flat_map和std::flat_set是C++23引入的基于有序动态数组的关联容器,以连续内存存储实现O(log n)查找,相比传统红黑树更缓存友好、内存紧凑,适用于中小规模、读多写少的场景。

c++23的std::flat_map和std::flat_set_c++基于vector的高性能关联容器

在C++23中,std::flat_mapstd::flat_set 正式成为标准库的一部分。它们是基于连续内存容器(如 std::vector)实现的高性能关联容器,提供类似 std::map 和 std::set 的接口,但在某些场景下性能更优。

什么是 flat_map 和 flat_set?

与传统的红黑树实现不同,std::flat_mapstd::flat_set 使用一个有序的动态数组(通常是封装了 std::vector 的结构)来存储元素。内部通过保持元素有序,并使用二分查找进行访问,从而实现 O(log n) 的查找复杂度。

它们的本质是一个“排序的 vector + 二分搜索”,牺牲了插入和删除的最差性能(O(n)),换取更好的缓存局部性和更低的内存开销。

相比 map/set 的优势

  • 缓存友好:数据连续存储,遍历和查找时 CPU 缓存命中率高,实际性能常优于指针离散的树结构。
  • 内存占用更小:没有额外的左右子节点指针和平衡标记,每个元素的开销接近原生类型。
  • 迭代效率高:连续内存支持快速遍历,适合只读或低频修改的场景。
  • 可预测的性能:避免了树结构可能的不平衡或重新平衡开销。

适用场景与使用建议

flat 容器最适合以下情况:

立即学习C++免费学习笔记(深入)”;

ClipDrop
ClipDrop

Stability.AI出品的图片处理系列工具(背景移除、图片放大、打光)

下载
  • 容器大小适中(几百到几千个元素)
  • 查找远多于插入/删除
  • 数据可以批量构建后只读使用
  • 对性能和内存敏感,尤其是嵌入式或高频计算场景

例如,在配置查找表、静态索引、编译时常量映射等场景中,std::flat_map 可显著提升性能。

注意:频繁插入删除会导致大量内存移动,此时传统 std::map 更合适。

基本用法示例

使用方式与标准容器类似:

#include 
#include 

int main() {
    std::flat_map fm;
    fm.insert({1, "one"});
    fm.insert({3, "three"});
    fm.insert({2, "two"}); // 自动排序

    for (const auto& [k, v] : fm) {
        std::cout << k << ": " << v << "\n";
    }
}

基本上就这些。std::flat_map 和 std::flat_set 是 C++23 对性能导向编程的重要补充,合理使用能有效提升程序效率。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1465

2023.10.24

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1023

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

439

2025.12.29

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

38

2025.11.27

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号