C++:wchar_t 不能作为键或值存储在 std::map 中

Ale*_*JCS 0 c++ wchar-t stdmap char

std::map<char, wchar_t>我正在尝试使用C++ 中的数据类型创建一个变量。当我尝试此操作时,Visual Studio 给出以下构建错误:

\n
\n

C2440“初始化”:无法从“初始化列表”转换为“std::map<char,wchar_t,std::less<char>,std::allocator<std::pair<const char,wchar_t>>>”

\n
\n

wchar_t当是键数据类型和char是值数据类型时也会发生同样的错误。

\n

您可以通过运行以下代码来复制此错误:

\n
const std::map<char, wchar_t> UNICODE_MAP = {\n    { 'X', L"\xe2\x96\x88" },\n    { 'G', L"\xe2\x96\x93" },\n    { 'O', L"\xe1\x97\xa3" },\n    { 'P', L"\xe1\x97\xa4" }\n};\n
Run Code Online (Sandbox Code Playgroud)\n

如何制作一个以键为 a char、以值作为wchar_t数据类型的映射?

\n

sel*_*bie 9

这是从窄字符到宽字符的映射,而不是字符到宽字符串的映射:

\n

而不是这个:

\n
const std::map<char, wchar_t> UNICODE_MAP = {\n    { 'X', L"\xe2\x96\x88" },\n    { 'G', L"\xe2\x96\x93" },\n    { 'O', L"\xe1\x97\xa3" },\n    { 'P', L"\xe1\x97\xa4" }\n};\n
Run Code Online (Sandbox Code Playgroud)\n

用这个:

\n
const std::map<char, wchar_t> UNICODE_MAP = {\n    { 'X', L'\xe2\x96\x88' },\n    { 'G', L'\xe2\x96\x93' },\n    { 'O', L'\xe1\x97\xa3' },\n    { 'P', L'\xe1\x97\xa4' }\n};\n
Run Code Online (Sandbox Code Playgroud)\n

如果您确实需要该值是字符串,则将其声明为:

\n
const std::map<char, std::wstring> UNICODE_MAP = {\n    { 'X', L"\xe2\x96\x88" },\n    ...\n
Run Code Online (Sandbox Code Playgroud)\n

另外,当我在这里时,我主张转义源文件中不在 ASCII 范围内的所有 Unicode 字符。在具有不同行为的 IDE、修订控制系统以及大厅里没有阅读您有关“另存为 Unicode”的备忘录的人之间,这很容易被损坏。所以...我的最终建议是这样的:

\n
const std::map<char, wchar_t> UNICODE_MAP = {\n    { 'X', L'\\u2588' },\n    { 'G', L'\\u2593' },\n    { 'O', L'\\u15e3' },\n    { 'P', L'\\u15e4' }\n};\n
Run Code Online (Sandbox Code Playgroud)\n