首页 > 解决方案 > 如何初始化字节数组的映射?

问题描述

如何初始化一个键是字符串、值是数据对(字节数组)和大小的映射?

#include <cstddef>
#include <map>
#include <string>
#include <utility>

std::map<std::string, std::pair<char*, size_t>> my_map = {
    {"key1", {{0xE2, 0x82, 0xAC}, 3}}
};

上面的代码无法编译。

标签: c++

解决方案


您的代码假设您将 char 指针存储在std::pair. Char 指针与 char 数组不同,尽管 char 数组隐式转换为char*.

如果你真的想存储char*,你可以在堆上分配内存并将分配内存的指针分配给你的对。然后,当然,您必须释放内存。或者您可以分配一个分配在堆栈上的数组的指针,但是您必须确保分配在堆栈上的数组在映射的生命周期内是有效的。

正如评论中建议的那样,您可以使用std::vector<char>而不是std::pair<char*, std::size_t>. 然后你甚至可以省略字节的显式大小:

std::map<std::string, std::vector<char>> my_map = {
    {"key1", {0xE2, 0x82, 0xAC}}
};

推荐阅读