2011-03-28 4 views
1

pourquoi le programme suivant ne fonctionne pas? Comment puis-je le réparer?définir <class> insérer le problème

#include <iostream> 
#include <set> 

using namespace std; 

class K { 

private: 
    long a; 
}; 

int main() 
{ 
    K a; 
    set<K> b; 

    b.insert(a); 

    return 0; 
} 
+2

Veuillez être plus précis - mentionnez le message d'erreur et l'emplacement de l'erreur. –

Répondre

6

std::set nécessite un tri des éléments. Il nécessite que vous puissiez comparer ses éléments selon un certain ordre.

Soit ajouter une operator < pour votre classe K ou de fournir le second argument de modèle - le comparateur - à la classe set qui détermine l'ordre entre les deux instances K.

le Surcharger operator < est simple:

bool operator <(K const& x, K const& y) { 
    return x.a < y.a; 
} 

Cela signifie qu'une instance de K est inférieure à une autre si et seulement si ses membres a est inférieure à celle de l'autre.

0

L'ensemble requiert que l'opérateur < soit défini. Par exemple:

class K { 
public: 

bool operator< (const K& other) const { 
    return this->a < other.a; 
} 

private: 

long a; 

}; 
Questions connexes