Comment puis-je insérer d'objets dans les STL ensemble
J'essaie d'insérer un objet Point2D dans un Point2D ensemble, mais je ne suis pas capable de le faire, il semble que le jeu fonctionne pour les int et char, mais pas pour les objets.
J'ai besoin d'aide pour savoir comment insérer des objets dans le jeu ??? En supposant que je veux les trier par ordre croissant de la valeur de x
class Point2D
{
public:
Point2D(int,int);
int getX();
int getY();
void setX(int);
void setY(int);
double getScalarValue();
protected:
int x;
int y;
double distFrOrigin;
void setDistFrOrigin();
};
int main()
{
Point2D abc(2,3);
set<Point2D> P2D;
P2D.insert(abc); //i am getting error here, i don't know why
}
- Vous avez besoin d'écrire
operator<
pourPoint2D
- pouvez-vous élaborer davantage , désolé, je suis tout à fait novice en c++
- Un ensemble est triée. Si il ne peut pas trier vos objets, vous ne pouvez pas les mettre dans un ensemble. Le tri est effectué à l'aide de
operator<
ou un utilisateur spécifié prédicat. - La prochaine fois, veuillez fournir les messages d'erreur que vous obtenez.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour mettre en œuvre les
operator<
surcharge pour votre classe. Par exemple, dans votre classe, vous pouvez faire:Ensuite, à l'extérieur de votre classe:
Modifier: Comme suggéré par la Retraite de Ninja, vous pouvez également mettre en œuvre la présente comme un membre régulier de la fonction au sein de votre classe:
x
ignore tous les autres membres. Est-il strictement valide? Sur le dessus de ma tête, ok oui, probablement. Est-ce vraiment ce que l'OP veut? Douteux. Est-ce la bonne solution? Pas de.std::set<T>
exige questd::less<T>
est connu pour le type de la valeurT
. C'est ainsi qu'il peut ordonner à l'un de ses éléments, ce qui est fondamental pour le fonctionnement interne.Résoudre ce problème en définissant
bool operator<(const Point2D&, const Point2D&)
, avec toute la logique que vous choisissez aussi longtemps qu'il répond à la Faible Stricte De La Commande.C'est une exigence de la nature, mais une fois que vous avez fait cela, vous êtes bon pour aller.
Je crois, une meilleure façon de C++ 11 ou plus récent pour définir l'ordre est d'utiliser personnalisée foncteur, depuis std::set de soutien que.
Nous pouvons voir ensemble est définie dans l'en-tête
<set>
comme ceci:Par conséquent, pour comparer basé sur x par exemple: