CLI/C++中的二维字典

Two dimensional dictionary in CLI/C++

我正在尝试使用编程语言 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 ^> ^> ^ 

我做错了什么?

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

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

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

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