Frage zu std::unordered_set
-
nwp3 schrieb:
std::set<A, [](const A &a1, const A &a2){return a1.name < a2.name;}> Aset;Das müsstest Du nochmal üben.
std::set will als zweiten Templateparameter auch einen Typen haben, kein "Lambda-Objekt".Eisflamme schrieb:
Vergleich's mit std::binary_search (Sortierung natürlich vorausgesetzt).
wobei binary_search einem nur sagt, ob das Element vorhanden ist oder nicht. Was er will ist std::lower_bound -- wenn ich mich da richtig erinnere. Habe jetzt nicht nochmal extra nachgeguckt.
Bleibt vielleicht noch zu sagen, dass bei std::set und std::map die Laufzeit auch im schlechtesten Fall O(log(n)) ist, wohingegen die Laufzeit bei std::unordered_* im Durchschnitt O(1) und im schlechtesten Fall O(n) ist, je nachdem, wie viele Hash-Kollisionen es gibt.
-
"Lambda-Objekt"
closure-object. Allerdings ist die Idee nicht falsch - einfach den closure-type übergeben. Und dann muss noch eine Kopie des closure-objects an den Konstruktor von
setübergeben werden, denn der default-Konstruktor istdeleted.auto cap_obj = [](int a, int b){ return a < b; }; std::set<int, decltype(cap_obj)> set{cap_obj};
-
Sone schrieb:
"Lambda-Objekt"
capture-object.
Wenn du es genau haben willst, also Standardsprech, dann heißt das closure object, siehe §5.1.2/2. Ich habe aber bewusst "Lambda-Objekt" gesagt und mit Anführungszeichen umschlossen.
Sone schrieb:
capture-type
Du meinst closure type.

-
Ich hab mich völlig verdaddelt.* Natürlich closure. Ich habe gerade nur schon wieder etwas für das lambda-capture nach gesehen, und die Worte sind recht ähnlich....
Das ist mir peinlich.*Passiert mir öfter.
