Freigeben über


multiset::multiset

Erstellt eine Multimenge, die leer oder die Kopie einer ganzen anderen Multimenge oder eines Teils davon ist.

multiset( );
explicit multiset (
    const Compare& Comp
);
multiset (
    const Compare& Comp,
    const Allocator& Al
);
multiset(
    const multiset& Right
);
multiset(
    multiset&& Right
);
multiset(
    initializer_list<Type> IList
);

multiset(
    initializer_list<Type> IList, 
    const Compare& Comp
);

multiset(
    initializer_list<Type> IList, 
    const Compare& Comp, 
    const Allocator& Al
);

template<class InputIterator> 
    multiset (
        InputIterator First,
        InputIterator Last
    );
template<class InputIterator> 
    multiset (
        InputIterator First,
        InputIterator Last,
        const Compare& Comp
    );
template<class InputIterator>
    multiset (
        InputIterator First,
        InputIterator Last,
        const Compare& Comp,
        const Allocator& Al
    );

Parameter

Parameter

Beschreibung

Al

Die für dieses multiset-Objekt zu verwendende Speicherzuweisungsklasse, dessen Standard Allocator ist.

Comp

Die Vergleichsfunktion des Typs const Compare, die verwendet wird, um die Elemente in der Multimenge, deren Standard Compare ist, zu sortieren.

Right

Die Multimenge, deren Kopie die erstellte Multimenge ist.

First

Die Position des ersten Elements in dem zu kopierenden Elementbereich.

Last

Die Position des ersten Elements nach dem zu kopierenden Elementbereich.

IList

Das initializer_list-Element, aus dem die Elemente kopiert werden sollen.

Hinweise

In allen Konstruktoren wird ein Zuweisungsobjekttyp gespeichert, mit dem der Arbeitsspeicher für die Multimenge verwaltet wird und der später zurückgegeben werden kann, indem get_allocator aufgerufen wird. Der Zuweisungsparameter wird häufig aus den Klassendeklarationen und den Vorverarbeitungsmakros weggelassen, die zum Ersetzen alternativer Zuweisungen verwendet werden.

Alle Konstruktoren initialisieren ihre Multimenge.

In alle Konstruktoren wird ein Funktionsobjekt vom Typ "Compare" gespeichert, der verwendet wird, um unter den Schlüsseln der Multimenge eine Sortierung vorzunehmen, und der später zurückgegeben werden kann, indem key_comp aufgerufen wird.

Die ersten drei Konstruktoren geben eine leere ursprüngliche Multimenge an. Dabei gibt der Zweite den Typ der Vergleichsfunktion (Comp) an, die zum Angeben der Reihenfolge der Elemente verwendet wird, und der Dritte gibt explizit den zu verwendenden Zuweisungstyp (Al) an. Mit dem Schlüsselwort explicit werden bestimmte Arten automatischer Typumwandlung unterdrückt.

Der vierte Konstruktor gibt eine Kopie der Multimenge Right an.

Der fünfte Konstruktor gibt eine Kopie der Multimenge an, indem Right verschoben wird.

Die sechsten, siebten und achten Konstruktoren geben ein initializer_list-Element an, aus dem die Elemente kopiert werden.

Mit den folgenden drei Konstruktoren wird der [First, Last)-Bereich einer Multimenge kopiert, wobei sich die Explizitheit bei Angabe des Typs der Vergleichsfunktion und der Zuweisung erhöht.

Beispiel

// multiset_ctor.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main()
{
    using namespace std;
    //multiset <int>::iterator ms1_Iter, ms2_Iter, ms3_Iter;
    multiset <int>::iterator ms4_Iter, ms5_Iter, ms6_Iter, ms7_Iter;

    // Create an empty multiset ms0 of key type integer
    multiset <int> ms0;

    // Create an empty multiset ms1 with the key comparison
    // function of less than, then insert 4 elements
    multiset <int, less<int> > ms1;
    ms1.insert(10);
    ms1.insert(20);
    ms1.insert(20);
    ms1.insert(40);

    // Create an empty multiset ms2 with the key comparison
    // function of geater than, then insert 2 elements
    multiset <int, less<int> > ms2;
    ms2.insert(10);
    ms2.insert(20);

    // Create a multiset ms3 with the 
    // allocator of multiset ms1
    multiset <int>::allocator_type ms1_Alloc;
    ms1_Alloc = ms1.get_allocator();
    multiset <int> ms3(less<int>(), ms1_Alloc);
    ms3.insert(30);

    // Create a copy, multiset ms4, of multiset ms1
    multiset <int> ms4(ms1);

    // Create a multiset ms5 by copying the range ms1[_First, _Last)
    multiset <int>::const_iterator ms1_bcIter, ms1_ecIter;
    ms1_bcIter = ms1.begin();
    ms1_ecIter = ms1.begin();
    ms1_ecIter++;
    ms1_ecIter++;
    multiset <int> ms5(ms1_bcIter, ms1_ecIter);

    // Create a multiset ms6 by copying the range ms4[_First, _Last)
    // and with the allocator of multiset ms2
    multiset <int>::allocator_type ms2_Alloc;
    ms2_Alloc = ms2.get_allocator();
    multiset <int> ms6(ms4.begin(), ++ms4.begin(), less<int>(), ms2_Alloc);

    cout << "ms1 =";
    for (auto i : ms1)
        cout << " " << i;
    cout << endl;

    cout << "ms2 =";
    for (auto i : ms2)
        cout << " " << i;
   cout << endl;

   cout << "ms3 =";
   for (auto i : ms3)
       cout << " " << i;
    cout << endl;

    cout << "ms4 =";
    for (auto i : ms4)
        cout << " " << i;
    cout << endl;

    cout << "ms5 =";
    for (auto i : ms5)
        cout << " " << i;
    cout << endl;

    cout << "ms6 =";
    for (auto i : ms6)
        cout << " " << i;
    cout << endl;

    // Create a multiset by moving ms5
    multiset<int> ms7(move(ms5));
    cout << "ms7 =";
    for (auto i : ms7)
        cout << " " << i;
    cout << endl;

    // Create a multiset with an initializer_list
    multiset<int> ms8({1, 2, 3, 4});
    cout << "ms8=";
    for (auto i : ms8)
        cout << " " << i;
    cout << endl;
}

Ausgabe

ms1 = 10 20 20 40
ms2 = 10 20
ms3 = 30
ms4 = 10 20 20 40
ms5 = 10 20
ms6 = 10
ms7 = 10 20
ms8= 1 2 3 4

Anforderungen

Header: <set>

Namespace: std

Siehe auch

Referenz

multiset-Klasse

Standardvorlagenbibliothek