c++中如何初始化map_C++ map容器初始化技巧汇总

C++中std::map初始化有多种方式:1. 默认初始化适用于动态添加;2. 列表初始化(C++11)简洁直观;3. 使用make_pair或pair构造;4. 拷贝或移动现有map;5. insert或emplace批量插入;6. 静态常量map可用const结合列表初始化,C++17后推荐inline变量模拟constexpr行为。

c++中如何初始化map_C++ map容器初始化技巧汇总

在C++中,std::map 是一个常用的关联容器,用于存储键值对并自动按键排序。初始化 map 有多种方式,根据使用场景选择合适的方法可以提升代码可读性和效率。以下是几种常见的 map 初始化技巧。

1. 默认初始化

最简单的方式是声明一个空的 map,后续再插入元素。

适用于不确定初始值或需要动态添加数据的场景。

std::map<int, std::string> myMap; myMap[1] = "one"; myMap[2] = "two";

2. 使用列表初始化(C++11 起)

可以直接在构造时传入初始化列表,简洁直观。

std::map<int, std::string> myMap = {     {1, "one"},     {2, "two"},     {3, "three"} };

也可以省略等号:

c++中如何初始化map_C++ map容器初始化技巧汇总

紫东太初

中科院和武汉AI研究院推出的新一代大模型

c++中如何初始化map_C++ map容器初始化技巧汇总44

查看详情 c++中如何初始化map_C++ map容器初始化技巧汇总

std::map<int, std::string> myMap{     {1, "one"},     {2, "two"} };

3. 使用 make_pair 或直接构造 pair

在插入或初始化时,可用 std::make_pair 或显式构造 std::pair。

std::map<int, std::string> myMap = {     std::make_pair(1, "one"),     std::make_pair(2, "two") };

或者:

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

std::map<int, std::string> myMap{     {std::pair(1, "one")},     {std::pair(2, "two")} };

4. 拷贝或移动另一个 map

可以从已有的 map 构造新的 map。

std::map<int, std::string> original{{1, "A"}, {2, "B"}}; std::map<int, std::string> copy = original;        // 拷贝构造 std::map<int, std::string> move = std::move(original); // 移动构造

5. 利用 insert 或 emplace 进行批量初始化

适合在运行时逐步构建 map,或从其他数据结构加载数据。

std::map<int, std::string> myMap; myMap.insert({{1, "one"}, {2, "two"}}); // 或逐个插入 myMap.emplace(3, "three");

6. 静态常量 map 的初始化(C++17 及以上推荐)

对于需要只读常量映射的场景,可结合 inline 和 constexpr 构造静态 map。

C++17 不支持 constexpr std::map,但可通过第三方库或 C++20 的 consteval 实现编译期构造。常见做法是用字面量数组模拟:

const std::map<int, std::string> kMyMap = {     {1, "apple"},     {2, "Banana"} };

小贴士与注意事项

  • 初始化列表要求类型严格匹配,否则可能编译失败,建议使用 {} 自动推导。
  • map 会自动按键升序排列,自定义类型需提供比较函数。
  • 重复键在初始化列表中会以最后一个为准(实际行为取决于标准库实现,应避免)。
  • 使用 emplace 相比 insert 更高效,避免临时对象构造。

基本上就这些常用方法。选择哪种方式主要看是否需要运行时动态填充、是否追求性能、以及使用的 C++ 标准版本。不复杂但容易忽略细节。

app ai c++ apple 键值对 代码可读性 排列 标准库 常量 const 数据结构 map 对象

上一篇
下一篇