将 C# 字典转换为 C++ 映射

Converting C# Dictionary to C++ map

我收到了一本从 C# dll 到 C++/CLI 代码的字典。我正在尝试将字典转换为 std::map ,旧的 C++ 代码将进一步使用它。但我做不到。我有一个函数,它将字典作为参数,return 一个地图。

这就是我想要做的-

std::map < std::wstring, std::map<int, int>> Convert(Dictionary<String^, Dictionary<int, int>^>^ myMap)
{
   std::map < std::wstring, std::map<int, int>> h_result;

   for (std::wstring& stringKey : myMap->Keys)
   {
       for (std::pair<int, int> intKey : (myMap->Values))
       {
           h_result.insert(stringKey, intKey);
       }
   }

return h_result;
}

迭代值时出现错误。

error:this range-based 'for' statement requires a suitable "begin" function and none was found

谁能告诉我这是什么问题?或者如果有更好的方法将 Dictionary^ 转换为 std::map,请给我建议。

我不熟悉字典和 std::map。如果示例代码有任何愚蠢的错误,请告诉我。

您 (a) 尝试将 C++ range-for 循环与 Dictionary^ 一起使用,并且 (b) 尝试将系统类型与 C++ 标准类型互换使用。所有这些都行不通。

您需要更一步一步地完成此操作:使用 for each 迭代 Dictionary^ 集合,将 String^ 转换为 std::wstring properly,并使用 std::make_pair.

创建地图项

所以你的函数看起来像这样(未经测试)

std::map <std::wstring, std::map<int, int>> Convert(Dictionary<String ^, Dictionary<int, int>^> ^myMap)
{
    std::map <std::wstring, std::map<int, int>> h_result;

    // iterate the outer dictionary
    for each(KeyValuePair<String ^, Dictionary<int, int>^> ^kvp1 in myMap)
        {
        std::wstring stringKey = marshal_as<std::wstring>(kvp1->Key);

        std::map<int, int> mapValues;

        // iterate the inner dictionary
        for each(KeyValuePair<int, int> ^kvp2 in kvp1->Value)
            {
            // insert in inner map
            mapValues.insert(std::make_pair(kvp2->Key, kvp2->Value));
            }

        // insert in outer map
        h_result.insert(std::make_pair(stringKey, mapValues));
        }

    return h_result;
}