Es soll es mit anderen Container-Klassen konsistent machen, da einer der großen Aspekte des Polymorphismus darin besteht, verschiedene Klassen mit derselben API zu behandeln.
Es gibt tatsächlich die Anzahl zurück. Die Tatsache, dass die Zählung nur Null oder Eins für eine Menge sein kann, ändert diesen Aspekt nicht.
Es ist nicht grundsätzlich anders als ein Sammlungsobjekt, das nur zwei Dinge von jedem "Wert" gleichzeitig erlaubt. In diesem Fall würde es den Zählwert von Null, eins oder zwei zurückgeben, aber es ist immer noch ein Zählwert, genau wie bei einem Satz.
Der relevante Teil des Standards, der dies erfordert, ist C++11 23.2.4
, was von den assoziativen Containern set
, multiset
, map
und multimap
spricht. Tabelle 102 enthält die Anforderungen für diese assoziativen Container über die Anforderungen für "normale" Container hinaus, und das Bit für count
ist unten umschrieben:
size_type a.count(k)
- gibt die Anzahl der Elemente zurück, deren Schlüssel äquivalent zuk
ist. Die Komplexität istlog(a.size()) + a.count(k)
.
Alle assoziativen Container müssen die in §23.2.4 / 8 Tabelle 102 - Anforderungen für assoziative Container aufgeführten Anforderungen erfüllen. Eine davon ist, dass sie a.count(k)
implementieren, was dann
gibt die Anzahl der Elemente zurück, deren Schlüssel äquivalent zu k
ist
Der Grund ist eine konsistente Schnittstelle zwischen allen assoziativen Containern. Zum Beispiel wird diese Einheitlichkeit sehr wichtig sein, wenn generische Funktionsvorlagen geschrieben werden, die mit jedem assoziativen Container arbeiten müssen.
Es ist eine Standardoperation für Container, die die Anzahl der übereinstimmenden Elemente zurückgibt. In Sachen Listen macht das durchaus Sinn. Es ist einfach so, dass es bei einer Menge nur ein Vorkommen eines Elements geben kann und daher count
niemals einen Wert größer als 1 zurückgeben kann.
Tags und Links c++ stl naming-conventions naming