А разве функция, например, которая принимает const char**, не пример char**? В чем смысл такого каста?
А для чего в этом задании вообще мапина?
Можно представить, что мы таким образом пробегаемся по всем индексам матрицы N на M, причём по строчкам Переделать под какое поведение?
Откуда вообще такая терминология появилась - «список коллизий»? Просто несколько элементов в одной корзине, как их там хранить - другой вопрос
Копируемость где-то требуется?
Вот так тогда? std::sort(std::begin(arr), std::end(arr));