ich die akzeptierte Antwort auf this question in einer Templat-Klasse angewendet haben, wie folgt aus:Benutzerdefinierte std :: set Komparator - Kein Spiel für Aufruf [...]
template <typename T, typename S>
struct sizeCompare {
bool operator() (const std::set<Node<T, S>>& lhs, const std::set<Node<T, S>>& rhs) const {
return lhs.size() < rhs.size() || (lhs.size() == rhs.size() && lhs < rhs);
}
};
template <typename T, typename S>
class Graph {
private:
std::set<std::set<Node <T, S>>, sizeCompare <T, S>> cliques = {};
};
Jetzt versuche ich std::lower_bound
zu verwenden in einer der Methoden dieser Klasse, und dafür möchte ich meine sizeCompare
Struktur wiederverwenden. Ich habe gefolgt daher die Syntax in this answer gefunden, wie folgt aus:
// Still in Graph.h
std::set<Node <T, S>> getCliqueOfSize(const lli n) {
// ...
typename std::set<std::set<Node <T, S>>, sizeCompare <T, S>>::const_iterator it = std::lower_bound(cliques.begin(), cliques.end(), n, sizeCompare<T, S>());
// ...
}
jedoch Kompilieren dies folgende Fehler ergibt:
C:/PROGRA~2/CODEBL~1/mingw64/lib/gcc/x86_64-w64-mingw32/6.2.0/include/c++/bits/predefined_ops.h:144:11:
error: no match for call to
(sizeCompare<long long, void*>) (const std::set<Node<long long, void*>, std::less<Node<long long, void*> >, std::allocator<Node<long long, void*> > >&, const long long&)
{ return bool(_M_comp(*__it, __val)); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~
Fehler-Stack zeigt an, dass dieser Fehler passiert, wenn das Verfahren Erzeugen oben gezeigten . Die einzige Zeit, in der ich die Graph
Klasse instanziiere, verwende ich <long long, void *>
, so dass hier die Typen, die in dem Kompilierungsfehler angezeigt werden, stammen. Kann jemand erklären, warum ich diesen Fehler bekomme, und möglicherweise, wie man es repariert?
Dank. Das hat es gelöst. – pie3636