sortMyVectors( ???-myVectors, ???-myObj);
Ответ:
sortMyVectors(myVectors, *myObj);
Поскольку в данный момент у вас возникли некоторые базовые проблемы с указателями (и я подозреваю, что это практическое задание для какой-то домашней работы), вероятно, было бы слишком сложно предложить учить итераторы, но вам следует изучить это позже, наряду с std::sort
, что было бы довольно трудно победить при любой сортировке с ручным управлением.
Как попытка улучшить ваше понимание указателей:
MyObj* myObjPtr = ...;
Это указатель. Это указывает на адрес памяти. Предполагая, что он указывает на действительный, мы можем сделать это:
MyObj& myObjRef = *myObjPtr;
Теперь мы разыменовали указатель, чтобы получить указатель, и присвоили его ссылке, которая также похожа на указатель, но скрывает различие между указателем / указателем (не требуя оператора * для доступа к объекту указатель / ссылка).
В ответ на ваш комментарий:
"Сортировка" в основном сортирует эти векторы по их расстоянию от
другой вектор, но только в конкретном случае, поэтому я не знаю, если
есть стандартный способ сделать это ..
std :: sort принимает строгий предикат слабого порядка (в основном это функция или функциональный объект, который возвращает true / false в зависимости от того, element1 bool length_is_less(const string& str1, const string& str2)
{
return str1.size() < str2.size();
}
vector<string> my_strings = ...;
sort(my_strings.begin(), my_strings.end(), length_is_less);
Приведенный выше код сортирует строки на основе их длины от самой короткой строки до самой длинной строки, а не по умолчанию (оператор по умолчанию <реализация для строк), сортировка их по строковому порядку (в алфавитном порядке, грубо говоря). </p>
Учитывая эту возможность определять свой собственный предикат для сравнения объектов, вы можете в принципе сортировать что угодно по любому условию, используя std::sort
.