Transparente Komparatoren für assoziative C-Container
Das Konzept transparenter Komparatoren verstehen
In C 14. Assoziative Container führten ein neues Konzept ein, das als „transparente Komparatoren“ bekannt ist. Gemäß dem Standard nehmen die Member-Funktionsvorlagen find, count, Lower_bound, Upper_bound und equal_range nur dann an der Überladungsauflösung teil, wenn der Typ Compare::is_transparent vorhanden ist.
Ein transparenter Komparator ist ein Typ, der ein verschachteltes is_transparent definiert Typ. Dieser Typ signalisiert dem assoziativen Container, dass er den Komparator für die heterogene Suche als transparent betrachten soll. Dadurch kann der Container nun Vergleiche zwischen dem Schlüsseltyp des Containers und verschiedenen Typen durchführen, die mit dem Schlüsseltyp vergleichbar sind.
Vorteile transparenter Komparatoren
Transparente Komparatoren Lösen Sie das Problem der heterogenen Suche in assoziativen Containern. Traditionell konnten Container nur mit Schlüsseln durchsucht werden, die vom gleichen Typ waren wie der Schlüsseltyp des Containers. Mit transparenten Komparatoren können Container mit Werten durchsucht werden, die mit dem Schlüsseltyp vergleichbar, aber nicht unbedingt vom gleichen Typ sind.
Transparente Komparatoren implementieren
C 14 bietet a Bibliotheksvorlage namens less, die zum Definieren eines transparenten Komparators verwendet werden kann. Die Less-Vorlage verfügt über eine Standardimplementierung, die auf void spezialisiert ist und den Vergleich beliebiger Typen ermöglicht. Durch die Angabe von std::less
Auswirkungen auf Standardcontainer
Die Einführung Die Verwendung transparenter Komparatoren ändert das Verhalten assoziativer Container nur dann, wenn ein transparenter Komparator verwendet wird. Standardmäßig behalten Container ihr ursprüngliches Verhalten bei. Bei Verwendung eines transparenten Komparators wie std::less
Im bereitgestellten Beispiel std::set
Das obige ist der detaillierte Inhalt vonWie ermöglichen transparente Komparatoren eine heterogene Suche in assoziativen C-Containern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!