c ++ moins de surcharge d’opérateur, quelle manière d’utiliser?

Par exemple: dans un fichier d’en-tête C ++, si j’ai défini un struct Record et que je voudrais l’utiliser pour un sorting éventuel afin de surcharger l’ less operator . Voici trois manières que j’ai remarquées dans différents codes. En gros, j’ai remarqué que: si je vais mettre Record dans std::set , map , priority_queue ,… conteneurs, la version 2 fonctionne (probablement aussi la version 3); si je veux enregistrer Record dans un vector v , puis appeler make_heap(v.begin(), v.end()) etc., seule la version 1 fonctionne.

  struct Record { char c; int num; //version 1 bool operator num>rhs.num; } //version 2 friend bool operator num>rhs->num; } }; 

dans le même fichier d’en-tête par exemple:

  //version 3 inline bool operator num>rhs->num; } 

Essentiellement, j’aimerais poser les questions ici pour voir si quelqu’un pourrait proposer un résumé des différences entre ces trois méthodes et quels sont les bons endroits pour chaque version?

Ils sont essentiellement les mêmes, à part que le premier est non-const et vous permet de le modifier lui-même.

Je préfère la seconde pour 2 raisons:

  1. Il n’est pas nécessaire que ce soit un friend .
  2. lhs ne doit pas nécessairement être un Record

Le meilleur moyen de définir l’opérateur le moins important est:

 struct Record{ (...) const bool operator < ( const Record &r ) const{ return ( num < r.num ); } }; 

Privilégiez in-class sauf s’il ne peut pas l’être, car le premier argument est un type incorrect.