stl中的map、set、multimap、multiset,兼谈OceanBase造轮子
终于有机会有动力有能力看jjhou的《STL源码解析》了。采取快速翻阅模式,有望看完整本。 map和set的底层机制都是RB-Tree(红黑树),插入和查找都是O(lgN)的复杂度。map、set以前听说过,但从来不用,因为不了解,不知道背后是什么。通过读这本书了解到了其
终于有机会有动力有能力看jjhou的《STL源码解析》了。采取快速翻阅模式,有望看完整本。
map和set的底层机制都是RB-Tree(红黑树),插入和查找都是O(lgN)的复杂度。map、set以前听说过,但从来不用,因为不了解,不知道背后是什么。通过读这本书了解到了其背后的机制,也许在将来会用一用。
multimap和multiset没什么,只是对map和set的小修改而已。
除了这些,还有hash_map、hash_set,其底层机制不是RB-Tree,而是hash table。
了解到这些之后,map、set这些,都不神秘,都可控了。
目前还有一点需要再动手捉摸下:内存管理。STL的simple_allocator可定制行到底如何,得看看。
关于stl使用,最好的参考书莫过于cplusplus.com了
再扯一句OceanBase与STL。
OceanBase中几乎没有使用任何stl提供的功能,基本是在重复“发明轮子”,不过这种发明某种程度上我觉得看上去是合理的,比如:返回码、错误码的定制,这一点就具有很大的灵活性;内存使用方面可定制性也大很多;另外,也轻量很多;再另外,STL的接口也用得蛮头疼,一大段代码,全围着接口转了,也有办法不围着,多用用typedef就会看上去好很多。为什么OceanBase不用STL呢?我想,本质原因还是我们有一群很牛逼的工程师,有能力写出经得起考验的底层代码。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

application.yml definiert die Listensammlung. Die erste Möglichkeit besteht darin, die Annotation @ConfigurationProperties zu verwenden, um alle Werte der Listensammlung zu erhalten Hier ist zu beachten, dass beim Definieren der Listensammlung zunächst eine Konfigurationsklasse Bean definiert und dann die Annotation @ConfigurationProperties verwendet wird, um den Wert der Listensammlung zu erhalten. @Component übergibt die Entitätsklasse an das Spring-Management @ConfigurationPropertie

Interpretation der dynamischen SQL-Tags von MyBatis: Detaillierte Erläuterung der Verwendung von Set-Tags. MyBatis ist ein hervorragendes Persistenzschicht-Framework. Es bietet eine Fülle dynamischer SQL-Tags und kann Datenbankoperationsanweisungen flexibel erstellen. Unter anderem wird das Set-Tag zum Generieren der SET-Klausel in der UPDATE-Anweisung verwendet, die sehr häufig bei Aktualisierungsvorgängen verwendet wird. In diesem Artikel wird die Verwendung des Set-Tags in MyBatis ausführlich erläutert und seine Funktionalität anhand spezifischer Codebeispiele demonstriert. Was ist Set-Tag? Set-Tag wird in MyBati verwendet

1. Technischer Hintergrund In der tatsächlichen Projektentwicklung verwenden wir häufig Caching-Middleware (wie Redis, MemCache usw.), um die Verfügbarkeit und Robustheit des Systems zu verbessern. Wenn das Projekt jedoch relativ einfach ist, besteht in vielen Fällen keine Notwendigkeit, speziell Middleware wie Redis einzuführen, um die Komplexität des Systems zu erhöhen und Caching zu verwenden. Verfügt Java selbst über nützliche, leichtgewichtige Caching-Komponenten? Die Antwort ist natürlich ja, und es gibt mehr als einen Weg. Zu den gängigen Lösungen gehören: ExpiringMap-, LoadingCache- und HashMap-basierte Paketierung. 2. Technische Effekte zur Realisierung allgemeiner Cache-Funktionen, z. B. veraltete Löschstrategie, Aufwärmen von Hotspot-Daten. 3. ExpiringMap3.

Es gibt viele Möglichkeiten, Javabeans und Maps zu konvertieren, wie zum Beispiel: 1. Beans über ObjectMapper in JSON konvertieren und dann JSON in Map konvertieren. Nach dem Testen wurden 10.000 Beans konvertiert. es dauert 12 Sekunden! ! ! Nicht empfohlen. 2. Erhalten Sie die Attribute und Werte der Bean-Klasse durch Java-Reflektion und konvertieren Sie sie dann in die der Karte entsprechenden Schlüssel-Wert-Paare. Diese Methode ist die zweitbeste, aber etwas aufwändiger. 3. Durch die Methode net.sf.cglib.beans.BeanMap in der Klasse ist diese Methode äußerst effizient. Der Unterschied zur zweiten Methode besteht darin, dass die Bean aufgrund der Verwendung des Caches initialisiert werden muss erstellt.

Die Implementierung eines benutzerdefinierten Komparators kann durch die Erstellung einer Klasse erreicht werden, die „operator()“ überlädt, zwei Parameter akzeptiert und das Ergebnis des Vergleichs anzeigt. Beispielsweise sortiert die StringLengthComparator-Klasse Zeichenfolgen, indem sie ihre Längen vergleicht: Erstellen Sie eine Klasse, überladen Sie „operator()“ und geben Sie einen booleschen Wert zurück, der das Vergleichsergebnis angibt. Verwendung benutzerdefinierter Komparatoren zum Sortieren in Containeralgorithmen. Mit benutzerdefinierten Komparatoren können wir Daten anhand benutzerdefinierter Kriterien sortieren oder vergleichen, selbst wenn wir benutzerdefinierte Vergleichskriterien verwenden müssen.

Optimieren der Leistung der Go-Sprachkarte In der Go-Sprache ist Karte eine sehr häufig verwendete Datenstruktur, die zum Speichern einer Sammlung von Schlüssel-Wert-Paaren verwendet wird. Allerdings kann die Kartenleistung bei der Verarbeitung großer Datenmengen beeinträchtigt werden. Um die Leistung der Karte zu verbessern, können wir einige Optimierungsmaßnahmen ergreifen, um die zeitliche Komplexität von Kartenoperationen zu reduzieren und dadurch die Ausführungseffizienz des Programms zu verbessern. 1. Kartenkapazität vorab zuweisen. Beim Erstellen einer Karte können wir die Anzahl der Kartenerweiterungen reduzieren und die Programmleistung verbessern, indem wir Kapazität vorab zuweisen. Im Allgemeinen wir

Die Map-Direktive verwendet das Modul ngx_http_map_module. Standardmäßig lädt Nginx dieses Modul, sofern nicht künstlich --without-http_map_module. Das Modul ngx_http_map_module kann Variablen erstellen, deren Werte mit den Werten anderer Variablen verknüpft sind. Ermöglicht die Klassifizierung oder gleichzeitige Zuordnung mehrerer Werte zu mehreren verschiedenen Werten und die Speicherung in einer Variablen. Die Map-Direktive wird zum Erstellen einer Variablen verwendet, führt die Ansichtszuordnungsoperation jedoch nur aus, wenn die Variable akzeptiert wird Bei der Verarbeitung von Anforderungen, die nicht auf Variablen verweisen, weist das Modul keine Leistungsmängel auf. 1.ngx_http_map_module Modulanweisungsbeschreibung Kartensyntax

Sie können die Anzahl der Elemente in einem Container ermitteln, indem Sie die Memberfunktion size() des Containers verwenden. Beispielsweise gibt die Funktion size() des Vektorcontainers die Anzahl der Elemente zurück, die Funktion size() des Listencontainers gibt die Anzahl der Elemente zurück, die Funktion length() des Zeichenfolgencontainers gibt die Anzahl der Zeichen zurück und die Die Funktion Capacity() des Deque-Containers gibt die Anzahl der zugewiesenen Speicherblöcke zurück.
