как определить вектор с функтором - PullRequest
0 голосов
/ 20 сентября 2010

эй, я реализовал следующий функтор:

struct CompareCatId : public std::binary_function<Vehicle*, Vehicle*, bool>
{
    bool operator()(Vehicle* x, Vehicle* y) const
    {   
        if(x->GetVehicleType() > y->GetVehicleType())
            return true;
        else if (x->GetVehicleType() == y->GetVehicleType() && x->GetLicenseNumber() > y->GetLicenseNumber())
            return true;
        else
            return false;
    }
};

когда я пытаюсь определить вектор следующим образом, я получаю много ошибок:

vector<Vehicle*,CompareCatId>* m_vehiclesVector;

заранее спасибо заваша помощь.

Ответы [ 2 ]

4 голосов
/ 20 сентября 2010

vector не берет функтор, поэтому вы не можете.

vector имеет два параметра шаблона: тип сохраняемого объекта и используемый распределитель (распределитель является необязательным; по умолчанию он будет использовать std::allocator<T>).

упорядоченные ассоциативные контейнеры (например, map и set) позволяют указать функцию сравнения, поскольку они являются упорядоченными контейнерами: они должны хранить свои элементы в некотором порядке.если вы хотите сохранить элементы вектора отсортированными, вам нужно отсортировать их самостоятельно, либо вставив каждый новый элемент в правильную позицию в векторе, чтобы он всегда оставался отсортированным, либо путем сортировки вектора после завершения вставки элементов.Кроме того, вы можете использовать один из упорядоченных ассоциативных контейнеров, например set.

0 голосов
/ 20 сентября 2010

vector не отсортированный контейнер и поэтому не принимает тип сравнения.

Я думаю, что вы ищете std::set<Vehicle*,CompareCatId>* m_vehiclesVector;

...