用#include初始化Unordered_map
unordered_map initialization with #include
std::unordered_map<std::string, std::string> mimeMap = {
#define STR_PAIR(K,V) std::pair<std::string, std::string>(K,V)
#include "MimeTypes.inc"
};
mimetype文件。Inc就像:
STR_PAIR("3dm", "x-world/x-3dmf"),
STR_PAIR("3dmf", "x-world/x-3dmf"),
STR_PAIR("a", "application/octet-stream"),
STR_PAIR("aab", "application/x-authorware-bin"),
STR_PAIR("aam", "application/x-authorware-map"),
STR_PAIR("aas", "application/x-authorware-seg"),
STR_PAIR("abc", "text/vnd.abc"),
STR_PAIR("acgi", "text/html"),
STR_PAIR("afl", "video/animaflex"),
STR_PAIR("ai", "application/postscript"),
STR_PAIR("aif", "audio/aiff"),
我很困惑。下面的代码如何初始化unordered_map
?
#include
进行文本复制粘贴。就好像你直接写了下面的代码:
std::unordered_map<std::string, std::string> mimeMap = {
#define STR_PAIR(K,V) std::pair<std::string, std::string>(K,V)
STR_PAIR("3dm", "x-world/x-3dmf"),
// ...
STR_PAIR("aif", "audio/aiff"),
};
现在,STR_PAIR
是一个预处理宏,将其参数替换为std::pair<std::string, std::string>(K,V)
, K
和V
作为宏的参数。例如,上面的代码片段与:
std::unordered_map<std::string, std::string> mimeMap = {
std::pair<std::string, std::string>("3dm", "x-world/x-3dmf"),
// ...
std::pair<std::string, std::string>("aif", "audio/aiff"),
};
如果您正在使用gcc或clang,您可以使用-E
命令行选项来获得预处理的输出并自己查看。但要注意,它会相当大。
最后,这样的pair
用于复制初始化mimeMap
的元素。
这段代码也有bug,因为map
的value_type
是pair<const Key, Value>
,所以STR_PAIR
实际上应该创建std::pair<std::string const, std::string>
从参考文档中,您可以选择使用std::initializer_list
构造函数(5):
map( std::initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator() );
宏从std::pair
s构建一个,#include
指令替换{}
大括号内的文本。最后,它的计算结果为:
std::unordered_map<std::string, std::string> mimeMap = {
#define STR_PAIR(K,V) std::pair<std::string, std::string>(K,V)
std::pair<std::string, std::string>("3dm", "x-world/x-3dmf"),
std::pair<std::string, std::string>("3dmf", "x-world/x-3dmf"),
std::pair<std::string, std::string>("a", "application/octet-stream"),
std::pair<std::string, std::string>("aab", "application/x-authorware-bin"),
std::pair<std::string, std::string>("aam", "application/x-authorware-map"),
std::pair<std::string, std::string>("aas", "a");
std::pair<std::string, std::string>(pplication/x-authorware-seg"),
std::pair<std::string, std::string>("abc", "text/vnd.abc"),
std::pair<std::string, std::string>("acgi", "text/html"),
std::pair<std::string, std::string>("afl", "video/animaflex"),
std::pair<std::string, std::string>("ai", "application/postscript"),
std::pair<std::string, std::string>("aif", "audio/aiff"),
};
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 使用一个考虑到std::map中键值的滚动或换行的键
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 允许从 std::map 的密钥窃取资源?
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 将重物插入std::map
- 使用通用值初始化 std::map,不重复
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++:当所有条目都保证是唯一时,替代 std::map
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 使用字符数组作为 Map 中的键
- C++如何创建 std::map
- C++ equivalent to Java Map getOrDefault?
- 从其他容器中移动构造"std::map"
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 将 std::map::emplace 与返回 shared_ptr 的函数一起使用是否正确?
- C++中 std::map 的运行时复杂度是多少?
- unordered map -在c++ std::unordered_map中预分配桶