将 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;
}
我收到了一本从 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;
}