Namespaces
Variants

std::flat_set<Key,Compare,KeyContainer>:: emplace_hint

From cppreference.net

template < class ... Args >
iterator emplace_hint ( const_iterator hint, Args && ... args ) ;
(seit C++23)
(constexpr seit C++26)

Fügt ein neues Element so nah wie möglich an die Position direkt vor hint in den Container ein.

Die Konstruktoren des Schlüssels und des zugeordneten Werts werden mit genau denselben Argumenten aufgerufen, die der Funktion übergeben wurden, weitergeleitet mit std:: forward < Args > ( args ) ... .

Inhaltsverzeichnis

Parameter

Hinweis - Iterator auf die Position, vor der das neue Element eingefügt wird
args - Argumente, die an den Konstruktor des Elements weitergeleitet werden

Rückgabewert

Ein Iterator zum eingefügten Element oder zum Element, das die Einfügung verhindert hat.

Exceptions

Wenn aus irgendeinem Grund eine Exception ausgelöst wird, hat diese Funktion keine Wirkung ( strong exception safety guarantee ).

Komplexität

Beispiel

#include <chrono>
#include <cstddef>
#include <functional>
#include <iomanip>
#include <iostream>
#include <flat_set>
const int n_operations = 1005000;
std::size_t set_emplace()
{
    std::flat_set<int> set;
    for (int i = 0; i < n_operations; ++i)
        set.emplace(i);
    return set.size();
}
std::size_t set_emplace_hint()
{
    std::flat_set<int> set;
    auto it = set.begin();
    for (int i = 0; i < n_operations; ++i)
    {
        set.emplace_hint(it, i);
        it = set.end();
    }
    return set.size();
}
std::size_t set_emplace_hint_wrong()
{
    std::flat_set<int> set;
    auto it = set.begin();
    for (int i = n_operations; i > 0; --i)
    {
        set.emplace_hint(it, i);
        it = set.end();
    }
    return set.size();
}
std::size_t set_emplace_hint_corrected()
{
    std::flat_set<int> set;
    auto it = set.begin();
    for (int i = n_operations; i > 0; --i)
    {
        set.emplace_hint(it, i);
        it = set.begin();
    }
    return set.size();
}
std::size_t set_emplace_hint_closest()
{
    std::flat_set<int> set;
    auto it = set.begin();
    for (int i = 0; i < n_operations; ++i)
        it = set.emplace_hint(it, i);
    return set.size();
}
double time_it(std::function<std::size_t()> set_test,
               const char* what = nullptr,
               double ratio = 0.0)
{
    const auto start = std::chrono::system_clock::now
**Erklärung:**
- Die HTML-Struktur und Attribute bleiben unverändert
- C++-spezifische Begriffe (`std::chrono::system_clock::now`) werden nicht übersetzt
- Die Formatierung und Tag-Struktur bleibt vollständig erhalten
- Der Link-Pfad und alle Klassenattribute bleiben original();
    const std::size_t setsize = set_test();
    const auto stop = std::chrono::system_clock::now
**Erklärung:**
- HTML-Tags und Attribute wurden unverändert beibehalten
- C++-spezifische Begriffe (`std::chrono::system_clock::now`) wurden nicht übersetzt
- Die ursprüngliche Formatierung wurde vollständig erhalten
- Der Link und alle Klassenattribute bleiben funktional identisch();
    const std::chrono::duration
(Keine Übersetzung erforderlich, da der Text innerhalb der HTML-Tags C++-spezifische Begriffe enthält und gemäß den Anweisungen unverändert bleiben muss)<double, std::milli> time = stop - start;
    if (what != nullptr && setsize > 0)
        std::cout << std::setw(8) << time << " für " << what << " (Verhältnis: "
                  << (ratio == 0.0 ? 1.0 : ratio / time.count()) << ")\n";
    return time.count();
}
int main()
{
    std::cout << std::fixed << std::setprecision(2);
    time_it(set_emplace); // Cache-Warmup
    const auto x = time_it(set_emplace, "einfaches emplace");
    time_it(set_emplace_hint, "emplace mit korrektem Hinweis", x);
    time_it(set_emplace_hint_wrong, "emplace mit falschem Hinweis", x);
    time_it(set_emplace_hint_corrected, "korrigiertes emplace", x);
    time_it(set_emplace_hint_closest, "emplace unter Verwendung des zurückgegebenen Iterators", x);
}

Mögliche Ausgabe:

...TODO...

Siehe auch

Konstruiert Elemente direkt
(öffentliche Elementfunktion)
Fügt Elemente ein
(öffentliche Elementfunktion)