Skip to content

std::flat_map(C++23) ​

一句话 ​

用连续数组替代红黑树的有序映射——查找更快(缓存友好),内存更紧凑,但插入/删除是 O(n)。

头文件 ​

#include <flat_map>

核心 API 速查 ​

操作签名说明
访问元素V& operator[](const K& key)按键访问,不存在则插入默认值
查找iterator find(const K& key)返回指向元素的迭代器
插入pair<iterator, bool> insert(const value_type&)插入键值对
删除size_t erase(const K& key)按键删除元素
元素数量size_t size() const返回元素个数
是否为空bool empty() const检查是否为空
清空void clear()清除所有元素
迭代iterator begin() / end()按键序遍历
下界/上界iterator lower_bound(const K&)有序查找边界
是否包含bool contains(const K& key) const(C++23 起可用) 检查键是否存在

最小示例 ​

C++
// Standard: C++23
#include <flat_map>
#include <iostream>

int main() {
    std::flat_map<int, const char*> m;
    m[1] = "one";
    m[3] = "three";
    m[2] = "two";

    for (const auto& [k, v] : m) {
        std::cout << k << ": " << v << "\n";
    }
    // 1: one  2: two  3: three  (按键序排列)

    std::cout << std::boolalpha << m.contains(2) << "\n"; // true
}

嵌入式适用性:中 ​

  • 连续存储对 CPU 缓存友好,小数据集的查找性能远优于 std::map
  • 无节点分配器开销,内存碎片更少,适合堆空间受限的嵌入式环境
  • 插入/删除 O(n),不适合频繁修改的大数据集
  • 编译器支持尚在推进中(GCC 15+、Clang 20+,MSVC STL 尚未提供),生产环境需评估工具链

编译器支持 ​

GCCClangMSVC
152019.51

另见 ​


部分内容参考自 cppreference.com,采用 CC-BY-SA 4.0 许可

pdf-latest-4-g85128cc · 85128cc · 2026-10-05