Warum wird die count () -Methode des C ++ STL-Set-Containers so benannt?

8

Was es wirklich überprüft, ist contains () und nicht die Anzahl der Vorkommen, richtig? Duplikate sind auch nicht erlaubt, also würde nicht enthalten () ein besserer Name als count ()?

    
Cricketer 14.05.2013, 04:06
quelle

3 Antworten

12

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 zu k ist. Die Komplexität ist log(a.size()) + a.count(k) .

    
paxdiablo 14.05.2013, 04:13
quelle
4

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

ist
  

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.

    
Praetorian 14.05.2013 04:17
quelle
-1

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.

    
Gian 14.05.2013 04:13
quelle

Tags und Links