CLI / C ++中的二维字典

时间:2015-04-17 22:20:13

标签: c++-cli

我正在尝试使用编程语言CLI / C ++将数据存储在二维字典中。

然而,我在向他们添加内容时遇到了问题。

这是我在C#中的尝试:

 Dictionary<int, Dictionary<int, string>> MyDictionary;
 if (!MyDictionary.ContainsKey(100))
    MyDictionary.Add(100, new Dictionary<int, string>());

 MyDictionary[100][1234] = "Hello World";

现在 - 我的CLI / C ++尝试:

Dictionary<int, Dictionary<int, String^>^>^ MyDictionary = gcnew Dictionary<int, Dictionary<int, String^>^>();
//ContainsKey check here
MyDictionary[100][1234] = "Hello World"; //<--- ERROR
MyDictionary[100, 1234] = "Hello World"; //<--- ERROR

您似乎没有使用[] []在词典中添加内容。我看到人们使用[100,1234]而不是[100] [1234],但这也不起作用。

错误:

 function "System::Collections::Generic::Dictionary<TKey, TValue>::default[TKey]::set [with TKey=int, TValue=System::Collections::Generic::Dictionary<int, String ^> ^]" cannot be called with the given argument list
        argument types are: (int, int, String^)
        object type is: System::Collections::Generic::Dictionary<int, System::Collections::Generic::Dictionary<int, String ^> ^> ^ 

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你没有做错任何事。请注意,代码编译得很好。这是IntelliSense解析器中的错误。它有几个,EDG前端最初设计用于解析C ++,并且在需要处理C ++ / CLI代码时并不完全没有错误。

你可能不想忽略这些错误的诊断,它们非常烦人。最不痛苦的解决方法是:

   auto item = MyDictionary[100];
   item[1234] = "Hello World";

优化器完成后,速度没有差别。