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