Приветствуем вас и благодарим заранее!Функция вызова функции перегрузки() в структуре/что происходит с аргументами?
Я использую std::unique
до erase
от std::vector
. Чтобы проверить уникальность, я вызываю логическую функцию структуры. Поскольку я хотел бы использовать предопределенный допуск, я попытался добавить конструктор, которому передается желаемое значение. Это работает, но я действительно не знаю, почему.
std::vector<std::pair<int,double> > myVec;
struct Check{
double tol_ = 0.0;
Check(double tol) : tol_(tol)
{
}
bool operator()(const std::pair<int,double> &a,
const std::pair<int,double> &b)
{
return fabs(a.second-b.second) < tol_;
}
};
// fill vector
...
// remove duplicates
myVec.erase(std::unique(myVec.begin(), myVec.end(), Check(0.1)), myVec.end());
Действительно ли это в разумной практике? Я немного смущен насчет unique
. Когда эта функция будет достигнута, структура Check
будет построена с использованием допуска. Следующий unique
вызывает эту структуру еще несколько раз, чтобы сравнить векторные элементы, передав их в качестве ссылки?
Спасибо за ваши усилия!
Почему вы делаете 'myVec-> начать()' вместо 'myVec.begin()'? – PRP
Прежде всего ['std :: unique'] (http://en.cppreference.com/w/cpp/algorithm/unique) удаляет повторяющиеся * последовательные * элементы. Это означает, что ваш диапазон должен быть отсортирован. Во-вторых, 'myVec', похоже, не является указателем, использование оператора доступа к стрелкам неверно. Наконец, * как * это не работает? Не могли бы вы рассказать? –
У вас есть реальный вопрос? Я имею в виду, что могу ответить только «да». это разумная практика и делается таким образом. Поэтому вы правы, как это работает. – Hayt