Pack / unpack создает копию ваших данных: если ваши карты большие, вы можете этого избежать.Это также исключает ваш третий вариант.
Вы действительно можете определить пользовательский тип данных, но это будет немного сложно.См. Конец этого ответа для примера (заменив «graph» на «map» и «node» на «pair», как вы читаете).Я предлагаю вам прочитать по этим темам, чтобы получить четкое представление о том, что вам нужно делать.
То, что количество элементов не известно во время компиляции, не должно быть реальной проблемой.,Вы можете просто отправить сообщение с размером полезной нагрузки перед отправкой содержимого карты.Это позволит принимающему процессу выделить достаточно памяти для приемного буфера.
Возможно, вы захотите просто распечатать содержимое ваших карт в файлы, а затем попросить процессы прочитать выходные данные друг друга.Это гораздо проще, но не так элегантно и намного медленнее, чем передача сообщений.