Операция: &
+ имя переменной , а не &_
+ имя переменной .
В этом контексте &
, за которым следует переменная, означаетпередача указателя на эту переменную в качестве одного из аргументов функции.Вы, вероятно, заметите, что в вставленном вами коде третий очень длинный аргумент std::sort
на самом деле является лямбда-выражением (функцией):
[] (const auto &_1st, const auto &_2st) {
return _1st->h_value + _1st->g_value < _2st->h_value + _2st->g_value
}
Он соответствует третьему аргументу sort
изсогласно ЗДЕСЬ , ниже приведена краткая цитата:
comp
Двоичная функция, которая принимает два элемента в диапазоне в качестве аргументов и возвращает значение, преобразуемоекипетьВозвращаемое значение указывает, считается ли элемент, переданный в качестве первого аргумента, перед вторым в определенном строгом слабом порядке, который он определяет.Функция не должна изменять ни один из своих аргументов.Это может быть либо указатель на функцию, либо функциональный объект.
Так что, в основном, когда вы хотите отсортировать тип переменной по вашему определенному правилу, или c ++ не знает, как сравнивать цель, которую вы пытаетесьдля сортировки необходимо определить функцию, которая сообщает c ++, как выполнять сортировку.
Для получения дополнительной информации вы также можете взглянуть на THIS .
.несколько причин для передачи переменных в качестве ссылочных указателей вместо передачи по значению.Во многих случаях вы просто не хотели создавать дополнительное потребление памяти и экономить время, передавая по ссылке, вы получаете доступ к значениям без создания копии.Подробнее см. ЗДЕСЬ