Guillermo
Mitglied
Hi tutorials.de Benutzer,
ich versuche gerade ein kleine Templatefunktion zu implementieren. Ich will dass die Funktion zwei Parameter hat, und zwar zwei Iteratoren unbestimmten Typs (Ich weiß also beim Kompilieren noch nicht ob es Vektoren, eine List o.Ä. ist.). Die Aufgabe der Funktion ist den Wert in dem iterierbaren Container zu finden der am häufigsten vorkommt. Hier ein Beispiel wie ich die Funktion aufrufen möchte und wie deren Ergebnisse aussehen sollen (Ich nennen die Funktion "most_frequent"):
Mein Ansatz sieht folgendermaßen aus:
Wie ich die Funktion letztlich implementiere ist erstmal zweitrangig, wichtig ist für mich primär das Template. Es kompliert, versuche ich aber die Funktion wie oben aufzurufen, bekomme ich einen Fehler dass keine passende Funktion gefunden werden kann.
Ich glaub ich steig da noch nicht ganz durch. Was mache ich falsch? Gibt es vielleicht bessere Ansätze? Ich habe es auch mit einem allg. Iteratortyp probiert, ich brauche aber unbedingt den generischen Typ des Inhaltes der Container (oben int und std::string) weil ich die Anzahl der gleichen Werte z.B. in einem Hash speichern will.
Über Anregungen oder Hilfe würde ich mich sehr freuen!
Vielen Dank schon mal,
Guillermo
ich versuche gerade ein kleine Templatefunktion zu implementieren. Ich will dass die Funktion zwei Parameter hat, und zwar zwei Iteratoren unbestimmten Typs (Ich weiß also beim Kompilieren noch nicht ob es Vektoren, eine List o.Ä. ist.). Die Aufgabe der Funktion ist den Wert in dem iterierbaren Container zu finden der am häufigsten vorkommt. Hier ein Beispiel wie ich die Funktion aufrufen möchte und wie deren Ergebnisse aussehen sollen (Ich nennen die Funktion "most_frequent"):
Code:
std::vector<int> v = {1,1,1,2};
most_frequent(v.begin(), v.end()); // Soll 1 zurückgeben, Typ int
std::list<std::string> l = {"hallo","welt","hallo"};
most_frequent(l.begin(), l.end()); // Soll "hallo" zurückgeben, Typ std::string
Mein Ansatz sieht folgendermaßen aus:
Code:
template <typename E, template<typename , typename> class C>
E most_frequent(typename C<E, std::allocator<E> >::iterator &begin, typename C<E, std::allocator<E> >::iterator &end) {
return NULL;
}
Wie ich die Funktion letztlich implementiere ist erstmal zweitrangig, wichtig ist für mich primär das Template. Es kompliert, versuche ich aber die Funktion wie oben aufzurufen, bekomme ich einen Fehler dass keine passende Funktion gefunden werden kann.
main5.cpp: In function ‘int main(int, char**)’:
main5.cpp:35:34: error: no matching function for call to ‘most_frequent(std::vector<int>::iterator, std::vector<int>::iterator)’
main5.cpp:35:34: note: candidate is:
main5.cpp:18:3: note: template<class E, template<class, class> class C> E most_frequent(typename C<E, std::allocator<_T1> >::iterator, typename C<E, std::allocator<_T1> >::iterator)
main5.cpp:18:3: note: template argument deduction/substitution failed:
main5.cpp:35:34: note: couldn't deduce template parameter ‘E’
Ich glaub ich steig da noch nicht ganz durch. Was mache ich falsch? Gibt es vielleicht bessere Ansätze? Ich habe es auch mit einem allg. Iteratortyp probiert, ich brauche aber unbedingt den generischen Typ des Inhaltes der Container (oben int und std::string) weil ich die Anzahl der gleichen Werte z.B. in einem Hash speichern will.
Über Anregungen oder Hilfe würde ich mich sehr freuen!
Vielen Dank schon mal,
Guillermo
Zuletzt bearbeitet: