2010-09-20 10 views
0

hey, je mis en œuvre le foncteur suivant:comment définir un vecteur avec un foncteur

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; 
    } 
}; 

lorsque je tente de définir un vecteur comme suit je reçois beaucoup d'erreurs:

vector<Vehicle*,CompareCatId>* m_vehiclesVector; 

Merci d'avance pour votre aide.

+4

Quel est le message d'erreur? Et quelle définition de 'vector' utilisez-vous? Le deuxième argument dans le modèle pour 'std :: vector' est la classe de l'allocateur ... –

+0

Qu'est-ce qu'un véhicule? Je n'ai aucun problème à déclarer ce vecteur une fois que je définis un véhicule de classe. – mkb

+0

Pourquoi essayez-vous de faire ceci - qu'espérez-vous réaliser en incluant le foncteur dans votre déclaration de vecteur? –

Répondre

4

vector ne prend pas un foncteur, donc vous ne pouvez pas.

vector a deux paramètres de gabarit: le type d'objet à stocker et l'allocateur à utiliser (l'allocateur est facultatif, il utilisera par défaut std::allocator<T>).

Les conteneurs associatifs commandés (par exemple, map et set) vous permettent de spécifier une fonction de comparaison, car ils sont commandés conteneurs: ils doivent garder leurs éléments dans un certain ordre. Si vous souhaitez trier les éléments du vecteur, vous devez les trier vous-même, soit en insérant chaque nouvel élément dans la position correcte dans le vecteur de sorte qu'il reste toujours trié ou en triant le vecteur après avoir terminé insertion d'éléments. Vous pouvez également utiliser l'un des conteneurs associatifs ordonnés, par exemple set.

+1

Mettre un foncteur dans un vecteur ne devrait poser aucun problème s'il est assignable \ copy-constructable? –

+0

@Viktor: Oui, vous pouvez créer un vecteur de foncteurs en supposant qu'ils répondent à ces exigences; mais ce n'est pas ce que le PO essaie de faire. L'OP essaie de fournir un foncteur au vecteur, vraisemblablement pour que le vecteur l'utilise pour garder le vecteur trié. –

+0

@Viktor - vrai, mais OP essaye d'attacher le foncteur au vecteur

0

vector n'est pas un conteneur trié et en tant que tel n'accepte pas un type de comparaison.

Je pense que vous cherchez std::set<Vehicle*,CompareCatId>* m_vehiclesVector;

Questions connexes