Коллекции <?, array<type>> на C++/CLI

96
13 октября 2021, 17:40

Доброго времени суток.

Чтобы предвосхитить вопросы, что я пытаюсь реализовать, приведу идею на Python:

main_dict = {"group_1": ["subgroup_1",
                         "subgroup_2"],
             "group_2": ["subgroup_3",
                         "subgroup_4"]}
additional_dict = {"subgroup_1": ["eggs",
                               "bark"],
                   "subgroup_2": ["eggs",
                               "bark"],
                   "subgroup_3": ["eggs",
                               "bark"],
                   "subgroup_4": ["eggs",
                               "bark"]}

Таким образом, я пытаюсь получить словарь (или коллекцию) с ключом в виде <String^> (в переводе на C++) и соответствующими значениями типа <array<String^>> (предположительно?).

Пытаюсь создать подобную константную (мне не нужно будет изменять её в ходе программы) коллекцию:

std::map < String^, array<String^> > my_map = { {"group_1", {"subgroup_1", "subgroup_2"}},
};

или вот так

std::map < String^, array<String^>^ > ...

Увы, компилятор выдаёт ошибку в обеих случаях.

Отсутствуют экземпляры конструктора ..., соответствующие списку аргументов.

Прошу помочь мне разобраться в ошибке или подсказать более элегантный способ осуществления данной структуры.

Answer 1

Не стоит смешивать нативный код с управляемым.

Если использовать только коллекции .NET Framework, то вместо std::map можно взять Dictionary.
Массив - ссылочный тип, поэтому объявъяется так: array<String^>^ - в конце нужен ^.

Инициализаторы коллекций в C++/CLI есть только для массива. С учётом этого код будет выглядеть так:

auto dict = gcnew Dictionary<String^, array<String^>^>();
dict->Add("group_1", gcnew array<String^> { "subgroup_1", "subgroup_2" });

Или использовать только неуправляемые типы:

std::map<std::string, std::array<std::string, 2>> my_map{ { "group_1", {"subgroup_1", "subgroup_2"} } };
READ ALSO
condition_variable почему не залочился в unique_lock?

condition_variable почему не залочился в unique_lock?

Есть такой пример использования condition_variable:

116
Вычисление одинаковых цифр числа. Код есть, он работает. Но вылетает при использовании больших чисел

Вычисление одинаковых цифр числа. Код есть, он работает. Но вылетает при использовании больших чисел

Учу С++ самостоятельно, вот решил написать программу, которая определяет, есть ли повторяющиеся цифры в числеЧтобы усложнить себе жизнь, добавил...

366
c++ push_back правильно ли написал?

c++ push_back правильно ли написал?

у меня все работает хорошо, но в arr[0] где то присваивается 0Поэтому я пишу в PrintArray int i = 1

264