Ich brauche diesen Code zu implementieren, so dass es funktioniert:C++ Art Vektor der Vorlage <char *, char *> Objekte
Pair<char*, char*> p1, p2, p3;
vector<Pair<char*, char*> > v;
cin >> p1 >> p2 >> p3;
v.push_back(p1);
v.push_back(p2);
v.push_back(p3);
sort(v.begin(), v.end());
for (it = v.begin(); it != v.end(); ++it){
cout << *it << endl;
}
I Template-Klasse hergestellt, getestet alle Betreiber und alles funktioniert gut, aber jetzt habe ich Ich muss Spezialisierung für meine Klasse machen, damit der obere Code funktioniert. Hier ist, was ich getan habe:
template<typename T1, typename T2>
class Pair
{
T1 first;
T2 second;
public:
Pair(const T1& t1=0, const T2& t2=0) : first(t1), second(t2){}
Pair(const Pair<T1, T2>& other) : first(other.first), second(other.second){}
bool operator==(const Pair<T1, T2>& other) const{
return first == other.first && second == other.second;
}
bool operator!=(const Pair<T1, T2>& other) const{
return first != other.first && second != other.second;
}
bool operator<(const Pair<T1, T2>& other) const{
return first < other.first && second < other.second;
}
bool operator<=(const Pair<T1, T2>& other) const{
return first <= other.first && second <= other.second;
}
bool operator>(const Pair<T1, T2>& other) const{
return first > other.first && second > other.second;
}
bool operator>=(const Pair<T1, T2>& other) const{
return first >= other.first && second >= other.second;
}
Pair<T1, T2>& operator=(const Pair<T1, T2>& other){
first=other.first;
second=other.second;
return *this;
}
friend ostream& operator<<(ostream& os, const Pair<T1, T2>& b){
os << "Values: " << b.first << " " << b.second << endl;
return os ;
}
friend istream& operator>>(istream& is, Pair<T1, T2>& p){
is >> p.first >> p.second;
return is;
}
friend void swap(Pair<T1, T2>& a, Pair<T1, T2>& b){
Pair<T1, T2> t = a;
a = b;
b = t;
}
};
Ich weiß, dass für die Spezialisierung muss ich Code separat schreiben, also tat ich dies:
template<>
class Pair<char*, char*>{
char s1, s2;
public:
Pair(const char t1='x', const char t2='y') : s1(t1), s2(t2){}
friend ostream& operator<<(ostream& os, const Pair<char*, char*>& b){
os << "Values: " << b.s1 << " " << b.s2 << endl;
return os ;
}
friend istream& operator>>(istream& is, Pair<char*, char*>& p){
is >> p.s1 >> p.s2;
return is;
}
friend void sort(){
// ???
}
};
Betreiber < < und >> funktioniert gut, aber ich blieb auf Sortiere, weil ich keine Idee habe, wie man die Sortiermethode implementiert, so dass sie Buchstaben in dieser Spezialisierung für Vorlagenobjekte alphabetisch sortiert und sortiert. Google wird gegoogelt, aber nicht viel dort, also werden irgendwelche Hinweise oder Hilfe geschätzt ...
_'first == other.first'_ Wenn diese 'char *' Zeiger sind, ist die Bedingung wahrscheinlich nicht wahr. Sie benötigen wahrscheinlich eine Spezialisierung und verwenden 'strcmp()'. –
Alle Zeiger loswerden (Sie tun es falsch). Verwenden Sie std ::; string oder char (einzelne Zeichen), je nach Ihrer Absicht. –
Danke für die Antwort, ich habe total vergessen, Operator == für Char-Typ zu implementieren, aber ich glaube nicht, dass ich dort Probleme haben werde. Ich brauche Hilfe mit der Methode sort() – Teemo