Dictionary C字典到C++映射的转换

Dictionary C字典到C++映射的转换,dictionary,visual-c++,c++-cli,stdmap,Dictionary,Visual C++,C++ Cli,Stdmap,我正在接收一个从C dll到C++/CLI代码的字典。我正在尝试将字典转换成STD::MAP,它将被旧C++代码进一步使用。但我做不到。我有一个函数,它将以dictionary作为参数并返回一个map 这就是我想做的- 我在迭代这些值时出错 错误:此基于范围的“for”语句需要合适的begin函数,但未找到任何函数 谁能告诉我这里有什么问题吗?或者,如果有更好的方法将Dictionary^转换为std::map,请推荐我 我对字典和std::map很陌生。请让我知道如果有任何愚蠢的错误与样本代码

我正在接收一个从C dll到C++/CLI代码的字典。我正在尝试将字典转换成STD::MAP,它将被旧C++代码进一步使用。但我做不到。我有一个函数,它将以dictionary作为参数并返回一个map

这就是我想做的-

我在迭代这些值时出错

错误:此基于范围的“for”语句需要合适的begin函数,但未找到任何函数

谁能告诉我这里有什么问题吗?或者,如果有更好的方法将Dictionary^转换为std::map,请推荐我


我对字典和std::map很陌生。请让我知道如果有任何愚蠢的错误与样本代码。< /p> < p>您是尝试使用C++范围的循环与字典^,和B试图使用系统类型互换与C++标准类型。所有这些都行不通

您需要一步一步地执行此操作:使用for each迭代字典^collections,将字符串^s转换为std::wstring,并使用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;
}

它达到了预期的效果!只有一件事…需要处理Inner字典为nullptr的情况。我知道这不应该发生,但我的字典有一些内部字典作为nullptr。
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;
}