Я хотел бы добавить еще одну причину, чтобы не делать этого.Если вы используете указатели таким образом, и если у вас есть ошибка, которая зависит от упорядочения элементов контейнера, найти ее будет очень сложно.Даже если ваша программа кажется полностью детерминированной, она не будет.Порядок элементов в контейнере зависит от алгоритма, используемого распределителем памяти, который полностью находится вне вашего контроля.Если вы запускаете один и тот же пример несколько раз без перезапуска вашей программы, некоторые могут потерпеть неудачу, а другие - успешно.
Это голос горького опыта.Я сделал это с проектом отладчика, где у меня были контейнеры, заполненные символами C ++.Когда мне нужно было сортировать символы, я получал символы, которые отличаются друг от друга, но имеют одинаковые имена (например, перегруженные функции) и идентичны во всех других отношениях.Итак, в этом случае я сравнил их в крайнем случае по адресу символа объекта.Я столкнулся с несколькими ошибками, которые были явно недетерминированными, где недетерминизм был вызван именно этим явлением.Иногда потребовалось более 10 или 15 попыток воспроизвести проблемы.В конце концов я потратил время на устранение сортировки по адресам, и это избавило меня от многих проблем в долгосрочной перспективе.Но каждый раз, когда я делаю это, я чувствую, что это ошибка.