multiset
(STL/CLR)
Třída šablony popisuje objekt, který řídí různou délkovou sekvenci prvků, které mají obousměrný přístup. Kontejner slouží multiset
ke správě posloupnosti prvků jako (téměř) vyváženého uspořádaného stromu uzlů, přičemž každý ukládá jeden prvek.
V následujícím GValue
popisu je stejný jako GKey
, který je zase stejný, jako Key
pokud druhý typ odkazu, v takovém případě je Key^
to .
Syntaxe
template<typename Key>
ref class multiset
: public
System::ICloneable,
System::Collections::IEnumerable,
System::Collections::ICollection,
System::Collections::Generic::IEnumerable<GValue>,
System::Collections::Generic::ICollection<GValue>,
System::Collections::Generic::IList<GValue>,
Microsoft::VisualC::StlClr::ITree<Gkey, GValue>
{ ..... };
Parametry
Key
Typ klíčové komponenty prvku v řízené sekvenci.
Požadavky
Header:<cliext/set>
Obor názvů: cliext
Deklarace
Definice typu | Popis |
---|---|
multiset::const_iterator |
Typ konstantního iterátoru řízené sekvence |
multiset::const_reference |
Typ konstantního odkazu na prvek |
multiset::const_reverse_iterator |
Typ konstantního zpětného iterátoru pro řízenou sekvenci. |
multiset::difference_type |
Typ (pravděpodobně podepsané) vzdálenosti mezi dvěma prvky. |
multiset::generic_container |
Typ obecného rozhraní pro kontejner. |
multiset::generic_iterator |
Typ iterátoru pro obecné rozhraní kontejneru. |
multiset::generic_reverse_iterator |
Typ zpětného iterátoru pro obecné rozhraní kontejneru. |
multiset::generic_value |
Typ elementu pro obecné rozhraní kontejneru. |
multiset::iterator |
Typ iterátoru řízené sekvence |
multiset::key_compare |
Pořadí delegátů pro dva klíče. |
multiset::key_type |
Typ klíče řazení |
multiset::reference |
Typ odkazu na prvek |
multiset::reverse_iterator |
Typ zpětné iterátoru pro řízenou sekvenci. |
multiset::size_type |
Typ (nezáporné) vzdálenosti mezi dvěma prvky. |
multiset::value_compare |
Delegát řazení pro dvě hodnoty prvků. |
multiset::value_type |
Typ prvku |
Členová funkce | Popis |
---|---|
multiset::begin |
Určuje začátek řízené sekvence. |
multiset::clear |
Odebere všechny prvky. |
multiset::count |
Počítá prvky odpovídající zadanému klíči. |
multiset::empty |
Zkouší, zda nejsou přítomny žádné prvky. |
multiset::end |
Určuje konec řízené sekvence. |
multiset::equal_range |
Najde rozsah, který odpovídá zadanému klíči. |
multiset::erase |
Odebere prvky v určených pozicích. |
multiset::find |
Vyhledá prvek, který odpovídá zadanému klíči. |
multiset::insert |
Přidá prvky. |
multiset::key_comp |
Zkopíruje delegáta řazení pro dva klíče. |
multiset::lower_bound |
Najde začátek rozsahu, který odpovídá zadanému klíči. |
multiset::make_value |
Vytvoří objekt hodnoty. |
multiset::multiset |
Sestaví objekt kontejneru. |
multiset::rbegin |
Určuje začátek obrácené řízené sekvence. |
multiset::rend |
Určuje konec obrácené řízené sekvence. |
multiset::size |
Spočítá počet prvků. |
multiset::swap |
Zamění obsah dvou kontejnerů. |
multiset::to_array |
Zkopíruje řízenou sekvenci do nového pole. |
multiset::upper_bound |
Najde konec rozsahu, který odpovídá zadanému klíči. |
multiset::value_comp |
Zkopíruje delegáta řazení pro dvě hodnoty prvků. |
Operátor | Popis |
---|---|
multiset::operator= |
Nahradí řízenou sekvenci. |
operator!= (multiset) |
Určuje, jestli se objekt nerovná jinému multiset multiset objektu. |
operator< (multiset) |
Určuje, zda multiset je objekt menší než jiný multiset objekt. |
operator<= (multiset) |
Určuje, zda multiset je objekt menší nebo roven jinému multiset objektu. |
operator== (multiset) |
Určuje, zda je multiset objekt roven jinému multiset objektu. |
operator> (multiset) |
Určuje, zda multiset je objekt větší než jiný multiset objekt. |
operator>= (multiset) |
Určuje, zda multiset je objekt větší nebo roven jinému multiset objektu. |
Rozhraní
Rozhraní | Popis |
---|---|
ICloneable | Duplikovat objekt |
IEnumerable | Sekvencovat prvky. |
ICollection | Udržujte skupinu prvků. |
IEnumerable<T> | Sekvencovat přes typové prvky. |
ICollection<T> | Udržujte skupinu typed elementů. |
ITree<Key, Value> |
Udržujte obecný kontejner. |
Poznámky
Objekt přidělí a uvolní úložiště pro sekvenci, které řídí jako jednotlivé uzly. Vloží prvky do (téměř) vyváženého stromu, který udržuje seřazený tak, že mění vazby mezi uzly, nikdy zkopírováním obsahu jednoho uzlu do druhého. To znamená, že můžete vložit a odebrat prvky volně bez rušivých zbývajících prvků.
Objekt objednává sekvenci, kterou řídí voláním uloženého delegáta objekt typu multiset::key_compare
. Při vytváření více sad můžete určit uložený objekt delegáta; Pokud zadáte žádný objekt delegáta, výchozí hodnota je porovnání operator<(key_type, key_type)
. K tomuto uloženému objektu přistupujete voláním členské funkce multiset::key_comp
.
Takový objekt delegáta musí být nastaven striktní slabé řazení klíčů typu multiset::key_type
. To znamená, že pro všechny dva klíče X
a Y
:
key_comp()(X, Y)
vrátí stejný logický výsledek při každém volání.
Pokud key_comp()(X, Y)
je pravda, key_comp()(Y, X)
musí být false.
Pokud key_comp()(X, Y)
je pravda, pak X
je řečeno, že je objednán před Y
.
Pokud !key_comp()(X, Y) && !key_comp()(Y, X)
je pravda, znamená to Y
X
, že mají ekvivalentní řazení.
Pro každý prvek X
, který předchází Y
řízené sekvenci, key_comp()(Y, X)
je false. (U výchozího objektu delegáta klíče nikdy nezmenší hodnotu.) Na rozdíl od sady tříd šablony (STL/CLR) objekt třídy multiset
šablony nevyžaduje, aby klíče pro všechny prvky byly jedinečné. (Dva nebo více klíčů můžou mít ekvivalentní řazení.)
Každý prvek slouží jako klíč i hodnota. Sekvence je reprezentována způsobem, který umožňuje vyhledávání, vložení a odebrání libovolného prvku v logaritmickém čase. To znamená, že počet operací je úměrný logaritmus počtu prvků v posloupnosti. Vložení prvku navíc zneplatní žádné iterátory a odebrání prvku zneplatní pouze iterátory, které ukazují na odebraný prvek.
Podporuje multiset
obousměrné iterátory, což znamená, že můžete přejít k sousedním prvkům, které mají iterátor, který určuje prvek v řízené sekvenci. Speciální hlavní uzel odpovídá iterátoru vrácené end()
. Pokud existuje, můžete tento iterátor dekrementovat, abyste dosáhli posledního prvku v řízené sekvenci. Můžete zvýšit multiset
iterátor tak, aby se dostal do hlavního uzlu, a pak se porovná se rovna end()
. Nemůžete ale odvodit iterátor vrácený end()
.
Prvek nelze odkazovat multiset
přímo na jeho číselnou pozici. To vyžaduje iterátor náhodného přístupu.
multiset
Iterátor ukládá popisovač do přidruženého multiset
uzlu, který pak ukládá popisovač do přidruženého kontejneru. Iterátory můžete používat pouze s přidruženými objekty kontejneru. multiset
Iterátor zůstane platný, pokud je přidružený multiset
uzel přidružený k některé multisetové sadě. Kromě toho je platný iterátor dereferencovatelný. Můžete ji použít pro přístup k hodnotě prvku, kterou určuje, nebo ji změnit, pokud není rovna end()
.
Vymazání nebo odebrání prvku volá destruktor pro uloženou hodnotu. Zničení kontejneru vymaže všechny prvky. Kontejner, jehož typ elementu je ref třída zajišťuje, že žádné prvky nedosáhly kontejneru. Kontejner popisovačů ale nezničí jeho prvky.
Členové
multiset::begin
Určuje začátek řízené sekvence.
Syntaxe
iterator begin();
Poznámky
Členová funkce vrátí obousměrný iterátor, který určuje první prvek řízené sekvence nebo těsně za koncem prázdné sekvence. Použijete ho k získání iterátoru, který určuje current
začátek řízené sekvence, ale jeho stav se může změnit, pokud se změní délka řízené sekvence.
Příklad
// cliext_multiset_begin.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// inspect first two items
Mymultiset::iterator it = c1.begin();
System::Console::WriteLine("*begin() = {0}", *it);
System::Console::WriteLine("*++begin() = {0}", *++it);
return (0);
}
a b c
*begin() = a
*++begin() = b
multiset::clear
Odebere všechny prvky.
Syntaxe
void clear();
Poznámky
Člen funkce efektivně volá erase(begin(), end())
. Použijete ho k zajištění, že řízená sekvence je prázdná.
Příklad
// cliext_multiset_clear.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
// add elements and clear again
c1.insert(L'a');
c1.insert(L'b');
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
return (0);
}
a b c
size() = 0
a b
size() = 0
multiset::const_iterator
Typ konstantního iterátoru řízené sekvence
Syntaxe
typedef T2 const_iterator;
Poznámky
Typ popisuje objekt nezadaného typu T2
, který může sloužit jako konstantní obousměrný iterátor pro řízenou sekvenci.
Příklad
// cliext_multiset_const_iterator.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
Mymultiset::const_iterator cit = c1.begin();
for (; cit != c1.end(); ++cit)
System::Console::Write("{0} ", *cit);
System::Console::WriteLine();
return (0);
}
a b c
multiset::const_reference
Typ konstantního odkazu na prvek
Syntaxe
typedef value_type% const_reference;
Poznámky
Typ popisuje konstantní odkaz na prvek.
Příklad
// cliext_multiset_const_reference.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
Mymultiset::const_iterator cit = c1.begin();
for (; cit != c1.end(); ++cit)
{ // get a const reference to an element
Mymultiset::const_reference cref = *cit;
System::Console::Write("{0} ", cref);
}
System::Console::WriteLine();
return (0);
}
a b c
multiset::const_reverse_iterator
Typ konstantního zpětného iterátoru pro řízenou sekvenci.
Syntaxe
typedef T4 const_reverse_iterator;
Poznámky
Typ popisuje objekt nezadaného typu T4
, který může sloužit jako konstantní reverzní iterátor pro řízenou sekvenci.
Příklad
// cliext_multiset_const_reverse_iterator.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c" reversed
Mymultiset::const_reverse_iterator crit = c1.rbegin();
for (; crit != c1.rend(); ++crit)
System::Console::Write("{0} ", *crit);
System::Console::WriteLine();
return (0);
}
c b a
multiset::count
Zjistí počet prvků odpovídající zadanému klíči.
Syntaxe
size_type count(key_type key);
Parametry
key
Hodnota klíče, kterou chcete vyhledat.
Poznámky
Členová funkce vrátí počet prvků v řízené sekvenci, které mají ekvivalentní řazení s key
. Použijete ho k určení počtu prvků aktuálně v řízené sekvenci, které odpovídají zadanému klíči.
Příklad
// cliext_multiset_count.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("count(L'A') = {0}", c1.count(L'A'));
System::Console::WriteLine("count(L'b') = {0}", c1.count(L'b'));
System::Console::WriteLine("count(L'C') = {0}", c1.count(L'C'));
return (0);
}
a b c
count(L'A') = 0
count(L'b') = 1
count(L'C') = 0
multiset::difference_type
Typy podepsané vzdálenosti mezi dvěma prvky.
Syntaxe
typedef int difference_type;
Poznámky
Typ popisuje pravděpodobně záporný počet prvků.
Příklad
// cliext_multiset_difference_type.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// compute positive difference
Mymultiset::difference_type diff = 0;
for (Mymultiset::iterator it = c1.begin(); it != c1.end(); ++it)
++diff;
System::Console::WriteLine("end()-begin() = {0}", diff);
// compute negative difference
diff = 0;
for (Mymultiset::iterator it = c1.end(); it != c1.begin(); --it)
--diff;
System::Console::WriteLine("begin()-end() = {0}", diff);
return (0);
}
a b c
end()-begin() = 3
begin()-end() = -3
multiset::empty
Zkouší, zda nejsou přítomny žádné prvky.
Syntaxe
bool empty();
Poznámky
Členová funkce vrátí hodnotu true pro prázdnou řízenou sekvenci. Je to ekvivalent .size() == 0
Použijete ho k otestování multiset
, jestli je prázdný.
Příklad
// cliext_multiset_empty.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("size() = {0}", c1.size());
System::Console::WriteLine("empty() = {0}", c1.empty());
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
System::Console::WriteLine("empty() = {0}", c1.empty());
return (0);
}
a b c
size() = 3
empty() = False
size() = 0
empty() = True
multiset::end
Určuje konec řízené sekvence.
Syntaxe
iterator end();
Poznámky
Členová funkce vrátí obousměrný iterátor, který odkazuje těsně za koncem řízené sekvence. Použijete jej k získání iterátoru, který určuje konec řízené sekvence; jeho stav se nezmění, pokud se změní délka řízené sekvence.
Příklad
// cliext_multiset_end.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// inspect last two items
Mymultiset::iterator it = c1.end();
--it;
System::Console::WriteLine("*-- --end() = {0}", *--it);
System::Console::WriteLine("*--end() = {0}", *++it);
return (0);
}
a b c
*-- --end() = b
*--end() = c
multiset::equal_range
Najde rozsah, který odpovídá zadanému klíči.
Syntaxe
cliext::pair<iterator, iterator> equal_range(key_type key);
Parametry
key
Hodnota klíče, kterou chcete vyhledat.
Poznámky
Členová funkce vrátí dvojici iterátorů cliext::pair<iterator, iterator>(lower_bound(key), upper_bound(key))
. Použijete ho k určení rozsahu prvků aktuálně v řízené sekvenci, které odpovídají zadanému klíči.
Příklad
// cliext_multiset_equal_range.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
typedef Mymultiset::pair_iter_iter Pairii;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// display results of failed search
Pairii pair1 = c1.equal_range(L'x');
System::Console::WriteLine("equal_range(L'x') empty = {0}",
pair1.first == pair1.second);
// display results of successful search
pair1 = c1.equal_range(L'b');
for (; pair1.first != pair1.second; ++pair1.first)
System::Console::Write("{0} ", *pair1.first);
System::Console::WriteLine();
return (0);
}
a b c
equal_range(L'x') empty = True
b
multiset::erase
Odebere prvky v určených pozicích.
Syntaxe
iterator erase(iterator where);
iterator erase(iterator first, iterator last);
size_type erase(key_type key)
Parametry
first
Začátek rozsahu, který chcete vymazat.
key
Hodnota klíče, kterou chcete vymazat.
last
Konec rozsahu, který chcete vymazat.
where
Prvek, který chcete vymazat.
Poznámky
První člen funkce odebere prvek řízené sekvence, na kterou where
odkazuje , a vrátí iterátor, který určuje první prvek, který zůstává za odebraným prvkem, nebo end()
pokud takový prvek neexistuje. Použijete ho k odebrání jednoho prvku.
Druhá členová funkce odebere prvky řízené sekvence v oblasti [first, last)
a vrátí iterátor, který určuje první prvek, který zůstává nad všemi odebranými prvky, nebo end()
pokud takový prvek neexistuje. Použijete ho k odebrání nulových nebo více souvislých prvků.
Třetí člen funkce odebere libovolný prvek řízené sekvence, jehož klíč má ekvivalentní pořadí k key
, a vrátí počet odebraných prvků. Použijete ho k odebrání a počítání všech prvků, které odpovídají zadanému klíči.
Vymazání každého prvku trvá určitou dobu úměrné logaritmus počtu prvků v řízené sekvenci.
Příklad
// cliext_multiset_erase.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// erase an element and reinspect
System::Console::WriteLine("erase(begin()) = {0}",
*c1.erase(c1.begin()));
// add elements and display " b c d e"
c1.insert(L'd');
c1.insert(L'e');
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// erase all but end
Mymultiset::iterator it = c1.end();
System::Console::WriteLine("erase(begin(), end()-1) = {0}",
*c1.erase(c1.begin(), --it));
System::Console::WriteLine("size() = {0}", c1.size());
return (0);
}
a b c
erase(begin()) = b
b c d e
erase(begin(), end()-1) = e
size() = 1
multiset::find
Vyhledá prvek, který odpovídá zadanému klíči.
Syntaxe
iterator find(key_type key);
Parametry
key
Hodnota klíče, kterou chcete vyhledat.
Poznámky
Pokud alespoň jeden prvek v řízené sekvenci má ekvivalentní řazení s key
, členské funkce vrátí iterátor označující jeden z těchto prvků; jinak vrátí end()
. Použijete ho k vyhledání prvku aktuálně v řízené sekvenci, která odpovídá zadanému klíči.
Příklad
// cliext_multiset_find.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("find {0} = {1}",
L'A', c1.find(L'A') != c1.end());
System::Console::WriteLine("find {0} = {1}",
L'b', *c1.find(L'b'));
System::Console::WriteLine("find {0} = {1}",
L'C', c1.find(L'C') != c1.end());
return (0);
}
a b c
find A = False
find b = b
find C = False
multiset::generic_container
Typ obecného rozhraní pro kontejner.
Syntaxe
typedef Microsoft::VisualC::StlClr::
ITree<GKey, GValue>
generic_container;
Poznámky
Typ popisuje obecné rozhraní pro tuto třídu kontejneru šablony.
Příklad
// cliext_multiset_generic_container.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct a generic container
Mymultiset::generic_container^ gc1 = %c1;
for each (wchar_t elem in gc1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// modify generic and display original
gc1->insert(L'd');
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// modify original and display generic
c1.insert(L'e');
for each (wchar_t elem in gc1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
return (0);
}
a b c
a b c
a b c d
a b c d e
multiset::generic_iterator
Typ iterátoru pro použití s obecným rozhraním kontejneru.
Syntaxe
typedef Microsoft::VisualC::StlClr::Generic::
ContainerBidirectionalIterator<generic_value>
generic_iterator;
Poznámky
Typ popisuje obecný iterátor, který lze použít s obecným rozhraním pro tuto třídu kontejneru šablony.
Příklad
// cliext_multiset_generic_iterator.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct a generic container
Mymultiset::generic_container^ gc1 = %c1;
for each (wchar_t elem in gc1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// get an element and display it
Mymultiset::generic_iterator gcit = gc1->begin();
Mymultiset::generic_value gcval = *gcit;
System::Console::WriteLine("{0} ", gcval);
return (0);
}
a b c
a b c
a
multiset::generic_reverse_iterator
Typ zpětného iterátoru pro použití s obecným rozhraním kontejneru.
Syntaxe
typedef Microsoft::VisualC::StlClr::Generic::
ReverseRandomAccessIterator<generic_value>
generic_reverse_iterator;
Poznámky
Typ popisuje obecný reverzní iterátor, který lze použít s obecným rozhraním pro tuto třídu kontejneru šablony.
Příklad
// cliext_multiset_generic_reverse_iterator.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct a generic container
Mymultiset::generic_container^ gc1 = %c1;
for each (wchar_t elem in gc1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// get an element and display it
Mymultiset::generic_reverse_iterator gcit = gc1->rbegin();
Mymultiset::generic_value gcval = *gcit;
System::Console::WriteLine("{0} ", gcval);
return (0);
}
a b c
a b c
c
multiset::generic_value
Typ elementu pro použití s obecným rozhraním kontejneru.
Syntaxe
typedef GValue generic_value;
Poznámky
Typ popisuje objekt typu GValue
, který popisuje uloženou hodnotu elementu pro použití s obecným rozhraním pro tuto třídu kontejneru šablony.
Příklad
// cliext_multiset_generic_value.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct a generic container
Mymultiset::generic_container^ gc1 = %c1;
for each (wchar_t elem in gc1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// get an element and display it
Mymultiset::generic_iterator gcit = gc1->begin();
Mymultiset::generic_value gcval = *gcit;
System::Console::WriteLine("{0} ", gcval);
return (0);
}
a b c
a b c
a
multiset::insert
Přidá prvky.
Syntaxe
iterator insert(value_type val);
iterator insert(iterator where, value_type val);
template<typename InIter>
void insert(InIter first, InIter last);
void insert(System::Collections::Generic::IEnumerable<value_type>^ right);
Parametry
first
Začátek oblasti, která se má vložit.
last
Konec oblasti, která se má vložit.
right
Výčet pro vložení
val
Hodnota klíče, kterou chcete vložit.
where
Kde v kontejneru vložit (pouze nápověda).
Poznámky
Každá z členských funkcí vloží sekvenci určenou zbývajícími operandy.
První člen funkce vloží prvek s hodnotou val
a vrátí iterátor, který určuje nově vložený prvek. Použijete ho k vložení jednoho prvku.
Druhá členová funkce vloží prvek s hodnotou val
pomocí where
nápovědy (ke zlepšení výkonu) a vrátí iterátor, který označuje nově vložený prvek. Slouží k vložení jednoho prvku, který může být vedle prvku, který znáte.
Třetí členová funkce vloží sekvenci [first
, last
). Slouží k vložení nuly nebo více prvků zkopírovaných z jiné sekvence.
Čtvrtá členová funkce vloží sekvenci určenou right
funkcí . Slouží k vložení sekvence popsané enumerátorem.
Každé vložení prvku trvá určitou dobu úměrné logaritmus počtu prvků v řízené sekvenci. Vložení může nastat v amortizované konstantní době, ale vzhledem k nápovědě, která označuje prvek vedle kurzoru.
Příklad
// cliext_multiset_insert.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// insert a single value, unique and duplicate
System::Console::WriteLine("insert(L'x') = {0}",
*c1.insert(L'x'));
System::Console::WriteLine("insert(L'b') = {0}",
*c1.insert(L'b'));
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// insert a single value with hint
System::Console::WriteLine("insert(begin(), L'y') = {0}",
*c1.insert(c1.begin(), L'y'));
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// insert an iterator range
Mymultiset c2;
Mymultiset::iterator it = c1.end();
c2.insert(c1.begin(), --it);
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// insert an enumeration
Mymultiset c3;
c3.insert( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<wchar_t>^)%c1);
for each (wchar_t elem in c3)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
return (0);
}
a b c
insert(L'x') = x
insert(L'b') = b
a b b c x
insert(begin(), L'y') = y
a b b c x y
a b b c x
a b b c x y
multiset::iterator
Typ iterátoru řízené sekvence
Syntaxe
typedef T1 iterator;
Poznámky
Typ popisuje objekt nezadaného typu T1
, který může sloužit jako obousměrný iterátor pro řízenou sekvenci.
Příklad
// cliext_multiset_iterator.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
Mymultiset::iterator it = c1.begin();
for (; it != c1.end(); ++it)
System::Console::Write("{0} ", *it);
System::Console::WriteLine();
return (0);
}
a b c
multiset::key_comp
Zkopíruje delegáta řazení pro dva klíče.
Syntaxe
key_compare^key_comp();
Poznámky
Členová funkce vrátí delegáta řazení, který se používá k seřazení řízené sekvence. Použijete ho k porovnání dvou klíčů.
Příklad
// cliext_multiset_key_comp.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
Mymultiset::key_compare^ kcomp = c1.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
// test a different ordering rule
Mymultiset c2 = cliext::greater<wchar_t>();
kcomp = c2.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
return (0);
}
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False
compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True
multiset::key_compare
Pořadí delegátů pro dva klíče.
Syntaxe
Microsoft::VisualC::StlClr::BinaryDelegate<GKey, GKey, bool>
key_compare;
Poznámky
Typ je synonymem pro delegáta, který určuje pořadí jeho klíčových argumentů.
Příklad
// cliext_multiset_key_compare.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
Mymultiset::key_compare^ kcomp = c1.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
// test a different ordering rule
Mymultiset c2 = cliext::greater<wchar_t>();
kcomp = c2.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
return (0);
}
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False
compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True
multiset::key_type
Typ klíče řazení
Syntaxe
typedef Key key_type;
Poznámky
Typ je synonymem pro parametr Key
šablony .
Příklad
// cliext_multiset_key_type.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c" using key_type
for (Mymultiset::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in key_type object
Mymultiset::key_type val = *it;
System::Console::Write("{0} ", val);
}
System::Console::WriteLine();
return (0);
}
a b c
multiset::lower_bound
Najde začátek rozsahu, který odpovídá zadanému klíči.
Syntaxe
iterator lower_bound(key_type key);
Parametry
key
Hodnota klíče, kterou chcete vyhledat.
Poznámky
Člen funkce určuje první prvek X
v řízené sekvenci, který má ekvivalentní pořadí .key
Pokud takový prvek neexistuje, vrátí end()
; v opačném případě vrátí iterátor, který určuje X
. Použijete ho k vyhledání začátku sekvence prvků aktuálně v řízené sekvenci, která odpovídá zadanému klíči.
Příklad
// cliext_multiset_lower_bound.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("lower_bound(L'x')==end() = {0}",
c1.lower_bound(L'x') == c1.end());
System::Console::WriteLine("*lower_bound(L'a') = {0}",
*c1.lower_bound(L'a'));
System::Console::WriteLine("*lower_bound(L'b') = {0}",
*c1.lower_bound(L'b'));
return (0);
}
a b c
lower_bound(L'x')==end() = True
*lower_bound(L'a') = a
*lower_bound(L'b') = b
multiset::make_value
Vytvoří objekt hodnoty.
Syntaxe
static value_type make_value(key_type key);
Parametry
key
Hodnota klíče, kterou chcete použít.
Poznámky
Členová funkce vrátí objekt, value_type
jehož klíčem je key
. Slouží k vytvoření objektu vhodného pro použití s několika dalšími členskými funkcemi.
Příklad
// cliext_multiset_make_value.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(Mymultiset::make_value(L'a'));
c1.insert(Mymultiset::make_value(L'b'));
c1.insert(Mymultiset::make_value(L'c'));
// display contents " a b c"
for each (Mymultiset::value_type elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
return (0);
}
a b c
multiset::multiset
Sestaví objekt kontejneru.
Syntaxe
multiset();
explicit multiset(key_compare^ pred);
multiset(multiset<Key>% right);
multiset(multiset<Key>^ right);
template<typename InIter>
multisetmultiset(InIter first, InIter last);
template<typename InIter>
multiset(InIter first, InIter last,
key_compare^ pred);
multiset(System::Collections::Generic::IEnumerable<GValue>^ right);
multiset(System::Collections::Generic::IEnumerable<GValue>^ right,
key_compare^ pred);
Parametry
first
Začátek oblasti, která se má vložit.
last
Konec oblasti, která se má vložit.
pred
Řazení predikátu pro řízenou sekvenci
right
Objekt nebo oblast, které chcete vložit.
Poznámky
Konstruktor:
multiset();
inicializuje řízenou sekvenci bez prvků s výchozím predikátem key_compare()
řazení . Slouží k určení prázdné počáteční řízené sekvence s výchozím predikátem řazení.
Konstruktor:
explicit multiset(key_compare^ pred);
inicializuje řízenou sekvenci bez prvků s predikátem pred
řazení . Použijete ho k určení prázdné počáteční řízené sekvence se zadaným predikátem řazení.
Konstruktor:
multiset(multiset<Key>% right);
inicializuje řízenou sekvenci [right.begin()
, right.end()
), s výchozím predikátem řazení. Slouží k určení počáteční řízené sekvence, která je kopií sekvence řízené objektem multiset
right
, s výchozím pořadím predikát.
Konstruktor:
multiset(multiset<Key>^ right);
inicializuje řízenou sekvenci [right->begin()
, right->end()
), s výchozím predikátem řazení. Slouží k určení počáteční řízené sekvence, která je kopií sekvence řízené objektem multiset
right
, s výchozím pořadím predikát.
Konstruktor:
template<typename InIter> multiset(InIter first, InIter last);
inicializuje řízenou sekvenci [first
, last
), s výchozím predikátem řazení. Použijete ho k vytvoření řízené sekvence jako kopie jiné sekvence s výchozím predikátem řazení.
Konstruktor:
template<typename InIter> multiset(InIter first, InIter last, key_compare^ pred);
inicializuje řízenou sekvenci [first
, last
), s pořadím predikát pred
. Použijete ji k tomu, aby řízená sekvence byla kopií jiné sekvence se zadaným predikátem řazení.
Konstruktor:
multiset(System::Collections::Generic::IEnumerable<Key>^ right);
inicializuje řízenou sekvenci sekvencí určenou enumerátorem right
, s výchozím predikátem řazení. Použijete ji k tomu, aby řízená sekvence byla kopií jiné sekvence popsané enumerátorem s výchozím predikátem řazení.
Konstruktor:
multiset(System::Collections::Generic::IEnumerable<Key>^ right, key_compare^ pred);
inicializuje řízenou sekvenci se sekvencí určenou enumerátorem right
s predikátem pred
řazení . Použijete ho k tomu, aby řízená sekvence byla kopií jiné sekvence popsané enumerátorem se zadaným predikátem řazení.
Příklad
// cliext_multiset_construct.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
// construct an empty container
Mymultiset c1;
System::Console::WriteLine("size() = {0}", c1.size());
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct with an ordering rule
Mymultiset c2 = cliext::greater_equal<wchar_t>();
System::Console::WriteLine("size() = {0}", c2.size());
c2.insert(c1.begin(), c1.end());
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct with an iterator range
Mymultiset c3(c1.begin(), c1.end());
for each (wchar_t elem in c3)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct with an iterator range and an ordering rule
Mymultiset c4(c1.begin(), c1.end(),
cliext::greater_equal<wchar_t>());
for each (wchar_t elem in c4)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct with an enumeration
Mymultiset c5( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<wchar_t>^)%c3);
for each (wchar_t elem in c5)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct with an enumeration and an ordering rule
Mymultiset c6( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<wchar_t>^)%c3,
cliext::greater_equal<wchar_t>());
for each (wchar_t elem in c6)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct from a generic container
Mymultiset c7(c4);
for each (wchar_t elem in c7)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct by copying another container
Mymultiset c8(%c3);
for each (wchar_t elem in c8)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
return (0);
}
size() = 0
a b c
size() = 0
c b a
a b c
c b a
a b c
c b a
c b a
a b c
multiset::operator=
Nahradí řízenou sekvenci.
Syntaxe
multiset<Key>% operator=(multiset<Key>% right);
Parametry
right
Kontejner, který se má zkopírovat.
Poznámky
Operátor člena zkopíruje right
objekt a pak vrátí *this
. Slouží k nahrazení řízené sekvence kopií řízené sekvence v right
.
Příklad
// cliext_multiset_operator_as.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (Mymultiset::value_type elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// assign to a new container
Mymultiset c2;
c2 = c1;
// display contents " a b c"
for each (Mymultiset::value_type elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
return (0);
}
a b c
a b c
multiset::rbegin
Určuje začátek obrácené řízené sekvence.
Syntaxe
reverse_iterator rbegin();
Poznámky
Členová funkce vrátí reverzní iterátor, který určuje poslední prvek řízené sekvence nebo těsně za začátek prázdné sekvence. Proto určuje beginning
zpětnou sekvenci. Použijete ho k získání iterátoru, který určuje current
začátek řízené sekvence zobrazené v obráceném pořadí, ale její stav se může změnit, pokud se délka řízené sekvence změní.
Příklad
// cliext_multiset_rbegin.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// inspect first two items in reversed sequence
Mymultiset::reverse_iterator rit = c1.rbegin();
System::Console::WriteLine("*rbegin() = {0}", *rit);
System::Console::WriteLine("*++rbegin() = {0}", *++rit);
return (0);
}
a b c
*rbegin() = c
*++rbegin() = b
multiset::reference
Typ odkazu na prvek
Syntaxe
typedef value_type% reference;
Poznámky
Typ popisuje odkaz na prvek.
Příklad
// cliext_multiset_reference.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
Mymultiset::iterator it = c1.begin();
for (; it != c1.end(); ++it)
{ // get a reference to an element
Mymultiset::reference ref = *it;
System::Console::Write("{0} ", ref);
}
System::Console::WriteLine();
return (0);
}
a b c
multiset::rend
Určuje konec obrácené řízené sekvence.
Syntaxe
reverse_iterator rend();
Poznámky
Členová funkce vrátí reverzní iterátor, který odkazuje přímo na začátek řízené sekvence. Proto určuje end
zpětnou sekvenci. Použijete ho k získání iterátoru, který určuje current
konec řízené sekvence zobrazené v obráceném pořadí, ale jeho stav se může změnit, pokud se délka řízené sekvence změní.
Příklad
// cliext_multiset_rend.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// inspect first two items
Mymultiset::reverse_iterator rit = c1.rend();
--rit;
System::Console::WriteLine("*-- --rend() = {0}", *--rit);
System::Console::WriteLine("*--rend() = {0}", *++rit);
return (0);
}
a b c
*-- --rend() = b
*--rend() = a
multiset::reverse_iterator
Typ zpětné iterátoru pro řízenou sekvenci.
Syntaxe
typedef T3 reverse_iterator;
Poznámky
Typ popisuje objekt nespecifikovaného typu T3
, který může sloužit jako reverzní iterátor řízené sekvence.
Příklad
// cliext_multiset_reverse_iterator.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c" reversed
Mymultiset::reverse_iterator rit = c1.rbegin();
for (; rit != c1.rend(); ++rit)
System::Console::Write("{0} ", *rit);
System::Console::WriteLine();
return (0);
}
c b a
multiset::size
Spočítá počet prvků.
Syntaxe
size_type size();
Poznámky
Členová funkce vrátí délku řízené sekvence. Použijete ho k určení počtu prvků aktuálně v řízené sekvenci. Pokud vám záleží na tom, zda sekvence má nenulové velikosti, podívejte se empty()
na .
Příklad
// cliext_multiset_size.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("size() = {0} starting with 3", c1.size());
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0} after clearing", c1.size());
// add elements and clear again
c1.insert(L'a');
c1.insert(L'b');
System::Console::WriteLine("size() = {0} after adding 2", c1.size());
return (0);
}
a b c
size() = 3 starting with 3
size() = 0 after clearing
size() = 2 after adding 2
multiset::size_type
Typ vzdálenosti se znaménkem mezi dvěma prvky
Syntaxe
typedef int size_type;
Poznámky
Typ popisuje nezáporný počet prvků.
Příklad
// cliext_multiset_size_type.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// compute positive difference
Mymultiset::size_type diff = 0;
for (Mymultiset::iterator it = c1.begin(); it != c1.end(); ++it)
++diff;
System::Console::WriteLine("end()-begin() = {0}", diff);
return (0);
}
a b c
end()-begin() = 3
multiset::swap
Zamění obsah dvou kontejnerů.
Syntaxe
void swap(multiset<Key>% right);
Parametry
right
Kontejner pro prohození obsahu.
Poznámky
Členová funkce prohodí řízené sekvence mezi this
a right
. Provede to v konstantním čase a nevyvolá žádné výjimky. Použijete ho jako rychlý způsob výměny obsahu dvou kontejnerů.
Příklad
// cliext_multiset_swap.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// construct another container with repetition of values
Mymultiset c2;
c2.insert(L'd');
c2.insert(L'e');
c2.insert(L'f');
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// swap and redisplay
c1.swap(c2);
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
return (0);
}
a b c
d e f
d e f
a b c
multiset::to_array
Zkopíruje řízenou sekvenci do nového pole.
Syntaxe
cli::array<value_type>^ to_array();
Poznámky
Členová funkce vrátí matici obsahující řízenou sekvenci. Použijete ji k získání kopie řízené sekvence ve formuláři pole.
Příklad
// cliext_multiset_to_array.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// copy the container and modify it
cli::array<wchar_t>^ a1 = c1.to_array();
c1.insert(L'd');
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// display the earlier array copy
for each (wchar_t elem in a1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
return (0);
}
a b c d
a b c
multiset::upper_bound
Najde konec rozsahu, který odpovídá zadanému klíči.
Syntaxe
iterator upper_bound(key_type key);
Parametry
key
Hodnota klíče, kterou chcete vyhledat.
Poznámky
Člen funkce určuje poslední prvek X
v řízené sekvenci, který má ekvivalentní řazení na key
. Pokud takový prvek neexistuje nebo je-li X
posledním prvkem v řízené sekvenci, vrátí ; v opačném případě vrátí end()
iterátor, který určuje první prvek nad rámec X
. Slouží k vyhledání konce sekvence prvků aktuálně v řízené sekvenci, která odpovídá zadanému klíči.
Příklad
// cliext_multiset_upper_bound.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display initial contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("upper_bound(L'x')==end() = {0}",
c1.upper_bound(L'x') == c1.end());
System::Console::WriteLine("*upper_bound(L'a') = {0}",
*c1.upper_bound(L'a'));
System::Console::WriteLine("*upper_bound(L'b') = {0}",
*c1.upper_bound(L'b'));
return (0);
}
a b c
upper_bound(L'x')==end() = True
*upper_bound(L'a') = b
*upper_bound(L'b') = c
multiset::value_comp
Zkopíruje delegáta řazení pro dvě hodnoty prvků.
Syntaxe
value_compare^ value_comp();
Poznámky
Členová funkce vrátí delegáta řazení, který se používá k seřazení řízené sekvence. Použijete ho k porovnání dvou hodnot prvků.
Příklad
// cliext_multiset_value_comp.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
Mymultiset::value_compare^ kcomp = c1.value_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
return (0);
}
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False
multiset::value_compare
Delegát řazení pro dvě hodnoty prvků.
Syntaxe
Microsoft::VisualC::StlClr::BinaryDelegate<generic_value, generic_value, bool>
value_compare;
Poznámky
Typ je synonymem pro delegáta, který určuje pořadí argumentů jeho hodnoty.
Příklad
// cliext_multiset_value_compare.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
Mymultiset::value_compare^ kcomp = c1.value_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
return (0);
}
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False
multiset::value_type
Typ prvku
Syntaxe
typedef generic_value value_type;
Poznámky
Typ je synonymem pro generic_value
.
Příklad
// cliext_multiset_value_type.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c" using value_type
for (Mymultiset::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in value_type object
Mymultiset::value_type val = *it;
System::Console::Write("{0} ", val);
}
System::Console::WriteLine();
return (0);
}
a b c
operator!=
(multiset)
Porovnání seznamu se nerovná.
Syntaxe
template<typename Key>
bool operator!=(multiset<Key>% left,
multiset<Key>% right);
Parametry
left
Levý kontejner, který chcete porovnat.
right
Správný kontejner, který chcete porovnat.
Poznámky
Funkce operátoru vrátí !(left == right)
. Použijete ho k otestování, jestli left
není seřazený stejně jako right
když jsou dva multisety porovnávány elementem.
Příklad
// cliext_multiset_operator_ne.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// assign to a new container
Mymultiset c2;
c2.insert(L'a');
c2.insert(L'b');
c2.insert(L'd');
// display contents " a b d"
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] != [a b c] is {0}",
c1 != c1);
System::Console::WriteLine("[a b c] != [a b d] is {0}",
c1 != c2);
return (0);
}
a b c
a b d
[a b c] != [a b c] is False
[a b c] != [a b d] is True
operator<
(multiset) (STL/CLR)
Seznam je menší než porovnání.
Syntaxe
template<typename Key>
bool operator<(multiset<Key>% left,
multiset<Key>% right);
Parametry
left
Levý kontejner, který chcete porovnat.
right
Správný kontejner, který chcete porovnat.
Poznámky
Funkce operátoru vrátí hodnotu true if, pro nejnižší pozici i
, pro kterou !(right[i] < left[i])
je také pravda left[i] < right[i]
. V opačném případě se vrátí left->size() < right->size()
. Použijete ho k otestování, zda left
je seřazen před right
tím, než jsou tyto dvě sady porovnávány elementem.
Příklad
// cliext_multiset_operator_lt.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// assign to a new container
Mymultiset c2;
c2.insert(L'a');
c2.insert(L'b');
c2.insert(L'd');
// display contents " a b d"
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] < [a b c] is {0}",
c1 < c1);
System::Console::WriteLine("[a b c] < [a b d] is {0}",
c1 < c2);
return (0);
}
a b c
a b d
[a b c] < [a b c] is False
[a b c] < [a b d] is True
operator<=
(multiset)
Uveďte menší nebo rovno porovnání.
Syntaxe
template<typename Key>
bool operator<=(multiset<Key>% left,
multiset<Key>% right);
Parametry
left
Levý kontejner, který chcete porovnat.
right
Správný kontejner, který chcete porovnat.
Poznámky
Funkce operátoru vrátí !(right < left)
. Použijete ho k otestování, zda left
není seřazena za right
, když jsou tyto dvě sady porovnávány elementem.
Příklad
// cliext_multiset_operator_le.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// assign to a new container
Mymultiset c2;
c2.insert(L'a');
c2.insert(L'b');
c2.insert(L'd');
// display contents " a b d"
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] <= [a b c] is {0}",
c1 <= c1);
System::Console::WriteLine("[a b d] <= [a b c] is {0}",
c2 <= c1);
return (0);
}
a b c
a b d
[a b c] <= [a b c] is True
[a b d] <= [a b c] is False
operator==
(multiset)
Porovnání se seznamem se rovná
Syntaxe
template<typename Key>
bool operator==(multiset<Key>% left,
multiset<Key>% right);
Parametry
left
Levý kontejner, který chcete porovnat.
right
Správný kontejner, který chcete porovnat.
Poznámky
Funkce operátoru vrátí hodnotu true pouze v případě, že sekvence řízené left
a right
mají stejnou délku a pro každou pozici i
, left[i] == right[i]
. Použijete ho k otestování, zda left
je seřazeno stejně jako right
když jsou dva multisety porovnávány prvek podle elementu.
Příklad
// cliext_multiset_operator_eq.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// assign to a new container
Mymultiset c2;
c2.insert(L'a');
c2.insert(L'b');
c2.insert(L'd');
// display contents " a b d"
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] == [a b c] is {0}",
c1 == c1);
System::Console::WriteLine("[a b c] == [a b d] is {0}",
c1 == c2);
return (0);
}
a b c
a b d
[a b c] == [a b c] is True
[a b c] == [a b d] is False
operator>
(multiset)
Seznam je větší než porovnání.
Syntaxe
template<typename Key>
bool operator>(multiset<Key>% left,
multiset<Key>% right);
Parametry
left
Levý kontejner, který chcete porovnat.
right
Správný kontejner, který chcete porovnat.
Poznámky
Funkce operátoru vrátí right < left
. Použijete ho k otestování, zda left
je seřazena za right
, když jsou tyto dvě sady porovnávány elementem.
Příklad
// cliext_multiset_operator_gt.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// assign to a new container
Mymultiset c2;
c2.insert(L'a');
c2.insert(L'b');
c2.insert(L'd');
// display contents " a b d"
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] > [a b c] is {0}",
c1 > c1);
System::Console::WriteLine("[a b d] > [a b c] is {0}",
c2 > c1);
return (0);
}
a b c
a b d
[a b c] > [a b c] is False
[a b d] > [a b c] is True
operator>=
(multiset)
Seznam větší než nebo rovno porovnání.
Syntaxe
template<typename Key>
bool operator>=(multiset<Key>% left,
multiset<Key>% right);
Parametry
left
Levý kontejner, který chcete porovnat.
right
Správný kontejner, který chcete porovnat.
Poznámky
Funkce operátoru vrátí !(left < right)
. Použijete ho k otestování, zda left
není seřazen před right
tím, když jsou tyto dvě sady porovnávány prvek podle elementu.
Příklad
// cliext_multiset_operator_ge.cpp
// compile with: /clr
#include <cliext/set>
typedef cliext::multiset<wchar_t> Mymultiset;
int main()
{
Mymultiset c1;
c1.insert(L'a');
c1.insert(L'b');
c1.insert(L'c');
// display contents " a b c"
for each (wchar_t elem in c1)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
// assign to a new container
Mymultiset c2;
c2.insert(L'a');
c2.insert(L'b');
c2.insert(L'd');
// display contents " a b d"
for each (wchar_t elem in c2)
System::Console::Write("{0} ", elem);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] >= [a b c] is {0}",
c1 >= c1);
System::Console::WriteLine("[a b c] >= [a b d] is {0}",
c1 >= c2);
return (0);
}
a b c
a b d
[a b c] >= [a b c] is True
[a b c] >= [a b d] is False