multiset Sınıf

C++ Standart Kitaplığı çok kümeli sınıfı, içerdiği öğelerin değerlerinin benzersiz olmaması gereken ve verilerin otomatik olarak sıralandığı anahtar değerler olarak görev yaptıkları bir koleksiyondan verilerin depolanması ve alınması için kullanılır. içindeki bir öğenin multiset anahtar değeri doğrudan değiştirilmeyebilir. Bunun yerine, eski değerlerin silinmesi ve yeni değerlerle sahip öğelerin eklenmesi gerekir.

Sözdizimi

template <class Key, class Compare =less <Key>, class Allocator =allocator <Key>>
class multiset

Parametreler

Key
içinde multisetdepolanacak öğe veri türü.

Compare
içinde göreli düzenlerini multisetbelirlemek için iki öğe değerini sıralama anahtarları olarak karşılaştırabilen bir işlev nesnesi sağlayan tür. İkili koşul daha az<Anahtar> varsayılan değerdir.

C++14'te, tür parametresi olmayan veya std::greater<> koşulunu std::less<> belirterek heterojen aramayı etkinleştirebilirsiniz. Daha fazla bilgi için bkz . İlişkili Kapsayıcılarda Heterojen Arama.

Allocator
's ayırma ve belleği serbest bırakma hakkındaki multisetayrıntıları kapsülleyen depolanan ayırıcı nesnesini temsil eden tür. Varsayılan değer şudur: allocator<Key>.

Açıklamalar

C++ Standart Kitaplığı multiset sınıfı:

  • İlişkili bir anahtar değerine dayalı öğe değerlerinin verimli alınmasını destekleyen bir değişken boyutu kapsayıcı olan ilişkilendirilebilir bir kapsayıcı.

  • Çift yönlüdür, çünkü öğelerine erişmek için çift yönlü yineleyiciler sağlar.

  • Sıralıdır, çünkü öğeleri belirtilen karşılaştırma işlevine uygun olarak kapsayıcı içindeki anahtar değerlere göre sıralanır.

  • Öğelerinin benzersiz anahtarlara sahip olması gerekmeyecek şekilde birden çok, böylece bir anahtar değeri onunla ilişkilendirilmiş birçok öğe değerine sahip olabilir.

  • Basit bir ilişkilendirilebilir kapsayıcıdır, çünkü öğelerinin değerleri kendi anahtar değerleridir.

  • Sınıf şablonu, sağladığı işlevsellik genel olduğundan ve öğe olarak yer alan belirli veri türünden çok bağımsızdır. Kullanılacak veri türü, karşılaştırma işlevi ve ayırıcı ile birlikte bir sınıf şablonunda bir parametre olarak belirtilir.

sınıfı tarafından multiset sağlanan yineleyici çift yönlü bir yineleyicidir, ancak sınıf üyesi işlev görür insert ve multiset şablon parametresi olarak işlev gereksinimleri çift yönlü yineleyiciler sınıfı tarafından garanti edilenden daha düşük olan daha zayıf bir giriş yineleyicisi olarak kabul edilen sürümlere sahiptir. Farklı yineleyici kavramları, işlevselliklerindeki iyileştirmelere göre ilgili bir aile biçimlendirir. Her yineleyici kavramının kendi gereksinimler kümesi vardır ve bunlarla çalışan algoritmaların kendi varsayımlarını yineleyici türü tarafından sağlanan gereksinimlerle sınırlaması gerekir. Bir giriş yineleyicinin bazı nesnelere başvurusunun kaldırılacağı ve dizideki sonraki yineleyiciye artırılabileceği varsayılabilir. Bu çok az işlev kümesidir, ancak sınıfın üye işlevleri bağlamında [ First, Last) bir dizi yineleyici hakkında anlamlı bir şekilde konuşabilmek yeterlidir.

Kapsayıcı türünün seçimi genelde uygulamanın gerektirdiği arama ve ekleme türüne dayalı olmalıdır. İlişkilendirilebilir kapsayıcılar, arama, ekleme ve kaldırma işlemleri için en iyi duruma getirilir. Bu işlemleri açıkça destekleyen üye işlevleri verimlidir ve bunları kapsayıcıdaki öğe sayısının logaritmasıyla ortalama orantılı bir zamanda gerçekleştirir. Öğelerin eklenmesi hiçbir yineleyiciyi geçersiz kılmaz ve öğelerin kaldırılması yalnızca kaldırılan öğeleri işaret eden yineleyicileri geçersiz kılır.

multiset, değerleri anahtarlarıyla ilişkilendiren koşullar uygulama tarafından karşılandığında tercih edilen ilişkilendirilebilir kapsayıcı olmalıdır. öğesinin multiset öğeleri birden çok olabilir ve kendi sıralama anahtarları olarak görev yapabilir, bu nedenle anahtarlar benzersiz değildir. Bu tür bir yapı modeli, sözcüklerin birden çok defa geçebildiği sıralı bir sözcükler listesindedir. Sözcüklerin birden çok defa geçmelerine izin verilmediğinde, bir küme uygun bir kapsayıcı yapısı olacaktır. Benzersiz tanımlar benzersiz anahtar sözcükler listesine değerler olarak eklendiyse, bir eşlem verileri kapsayacak uygun bir yapı olacaktır. Bunun yerine tanımlar benzersiz değilse, multimap tercih edilecek kapsayıcı bir olacaktır.

türündeki multiset bir saklı işlev nesnesini çağırarak denetlediği sırayı Comparesıralar. Bu depolanan nesne, üye işlevi çağrılarak erişilebilen bir karşılaştırma işlevidir key_comp. Genel olarak, öğelerin bu düzeni oluşturmak için yalnızca karşılaştırılabilirden daha az olması gerekir: böylece, herhangi iki öğe göz önüne alındığında, eşdeğer oldukları (diğerinden küçük olmadığı anlamına gelir) veya birinin diğerinden küçük olduğu belirlenebilir. Bu, denk olmayan öğeler arasında bir sıralamaya neden olur. Daha teknik bir not üzerinde, karşılaştırma işlevi standart matematiksel anlamda katı bir zayıf sıralama sevk eden ikili bir koşuldur. İkili koşul f(x, y) iki bağımsız değişken nesnesi x ve y içeren bir işlev nesnesi ve veya falsedönüş değeridirtrue. İkili koşul esnek değilse, antisymetrik ve geçişliyse ve denklik geçişliyse, hem f(x,y) hem de f(y,x) yanlış olduğunda iki x ve y nesnesinin eşdeğer olarak tanımlandığı kümeye uygulanan sıralama katı bir zayıf sıralamadır. Anahtarlar arasındaki eşitliğinin daha güçlü koşulu bu denkliğin yerini alırsa, sıralama (içindeki tüm öğelerin birbirine göre sıralanması anlamında) toplam haline gelir ve eşleşen anahtarlar birbirinden ayırt edilemez olacaktır.

C++14'te, tür parametresi olmayan veya std::greater<> koşulunu std::less<> belirterek heterojen aramayı etkinleştirebilirsiniz. Daha fazla bilgi için bkz . İlişkili Kapsayıcılarda Heterojen Arama.

Oluşturucular

Oluşturucu Açıklama
çoklu küme multiset Boş olan veya belirtilen multisetbir öğesinin tümünün veya bir bölümünün kopyası olan bir oluşturur.

Tür tanımları

Tür adı Açıklama
allocator_type nesnesi için allocator sınıfı için multiset bir typedef.
const_iterator içindeki bir öğeyi multisetokuyabilen çift yönlü bir yineleyici için typedefconst.
const_pointer içindeki bir öğeye yönelik bir const işaretçi için typedef multiset.
const_reference okuma ve işlem yapma const için içinde depolanan bir const öğeye başvuru için typedefmultiset.
const_reverse_iterator içindeki herhangi const bir öğeyi multisetokuyabilen çift yönlü bir yineleyici için typedef.
difference_type Yineleyiciler tarafından işaret edilen öğeler arasındaki bir aralıktaki öğelerinin multiset sayısı için imzalı bir tamsayı türü tanımı.
iterator bir içindeki herhangi bir öğeyi okuyabilen veya değiştirebilen çift yönlü bir yineleyici için typedef multiset.
key_compare içindeki iki öğeye multisetilişkin göreli sırayı belirlemek üzere iki anahtarı karşılaştırabilen bir işlev nesnesi için tür tanımı.
key_type içindeki iki öğeye multisetgöre sırasını belirlemek için iki sıralama anahtarını karşılaştırabilen bir işlev nesnesi için typedef.
pointer içindeki bir öğeye yönelik bir işaretçi için typedef multiset.
reference içinde depolanan bir öğeye başvuru için tür multisettanımı.
reverse_iterator Ters çevrilmiş multisetiçindeki bir öğeyi okuyabilen veya değiştirebilen çift yönlü bir yineleyici için typedef.
size_type içindeki öğe sayısını temsil eden işaretsiz bir multisettamsayı türü.
value_compare içinde göreli düzenlerini belirlemek için iki öğeyi sıralama anahtarları olarak karşılaştırabilen bir işlev nesnesinin multisettypedef değeri.
value_type Kapasitede değer olarak öğe olarak multiset depolanan bir nesneyi tanımlayan tür tanımı.

Üye işlevleri

Üye işlevi Açıklama
begin içindeki ilk öğeye multisetişaret eden bir yineleyici döndürür.
cbegin içindeki ilk öğeyi multisetele alan bir sabit yineleyici döndürür.
cend bir içindeki son öğenin başarılı olduğu konumu ele alan bir multisetsabit yineleyici döndürür.
clear öğesinin multisettüm öğelerini siler.
containsC++20 içinde multisetbelirtilen anahtara sahip bir öğe olup olmadığını denetleyin.
count Anahtarı parametre olarak belirtilen anahtarla eşleşen bir multiset içindeki öğelerin sayısını döndürür.
crbegin ters çevrilmiş multisetiçindeki ilk öğeyi ele alan bir sabit yineleyici döndürür.
crend Ters çevrilmiş multisetbir içindeki son öğeyi başaran konumu ele alan bir sabit yineleyici döndürür.
emplace içine yerinde inşa edilmiş bir multisetöğe ekler.
emplace_hint Bir yerleştirme ipucuyla içine yerinde multisetinşa edilmiş bir öğe ekler.
empty boş multiset olup olmadığını sınar.
end içindeki son öğeden sonraki konuma işaret eden bir multisetyineleyici döndürür.
equal_range Yineleyicilerin bir çiftini döndürür. Çiftteki ilk yineleyici, belirtilen anahtardan büyük bir anahtara sahip bir içindeki ilk öğeye multiset işaret eder. Çiftteki ikinci yineleyici, anahtarına eşit veya anahtardan daha büyük bir anahtarla içindeki ilk öğeye multiset işaret eder.
erase Belirtilen konumlardan bir öğeyi veya bir multiset öğe aralığını kaldırır veya belirtilen bir anahtarla eşleşen öğeleri kaldırır.
find Belirtilen anahtara eşit bir anahtara sahip bir öğenin multiset ilk konumuna işaret eden bir yineleyici döndürür.
get_allocator nesnesini oluşturmak allocator için kullanılan nesnesinin multisetbir kopyasını döndürür.
insert içine bir öğe veya öğe multisetaralığı ekler.
key_comp içinde iki öğe multisetgöreli sırasını belirlemek için iki sıralama anahtarını karşılaştırabilen bir işlev nesnesi sağlar.
lower_bound Belirtilen anahtara eşit veya bundan büyük bir anahtara sahip bir içindeki ilk öğeye multiset bir yineleyici döndürür.
max_size değerinin uzunluk üst sınırını multisetdöndürür.
rbegin ters çevrilmiş multisetiçindeki ilk öğeyi gösteren bir yineleyici döndürür.
rend Ters çevrilmiş multisetbir içindeki son öğenin başarılı olduğu konumu gösteren bir yineleyici döndürür.
size içindeki multisetöğe sayısını döndürür.
swap İki multisetöğesinin öğelerini değiştirir.
upper_bound Belirtilen anahtardan büyük bir anahtarla içindeki ilk öğeye multiset bir yineleyici döndürür.
value_comp içindeki öğe değerlerini sıralamak için kullanılan karşılaştırma nesnesinin bir multisetkopyasını alır.

İşleçler

Operator Açıklama
operator= öğesinin multiset öğelerini başka multisetbir kopyasının kopyasıyla değiştirir.

Gereksinimler

Üstbilgi: <set>

Ad alanı: std

multiset::allocator_type

Nesne için ayırıcı sınıfını multiset temsil eden bir tür

typedef Allocator allocator_type;

Açıklamalar

allocator_type , şablon parametresinin Allocatoreş anlamlısıdır.

hakkında Allocatordaha fazla bilgi için, çok kümeli Sınıf konusunun Açıklamalar bölümüne bakın.

Örnek

get_allocator Örneğin örneğine bakın:allocator_type

multiset::begin

içindeki ilk öğeyi multisetele alan bir yineleyici döndürür.

const_iterator begin() const;

iterator begin();

Dönüş Değeri

veya konumundaki ilk öğeyi multiset ele alan ve boş bir çoklu kümenin başarılı olduğu çift yönlü yineleyici.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;
   multiset <int>::const_iterator ms1_cIter;

   ms1.insert( 1 );
   ms1.insert( 2 );
   ms1.insert( 3 );

   ms1_Iter = ms1.begin( );
   cout << "The first element of ms1 is " << *ms1_Iter << endl;

   ms1_Iter = ms1.begin( );
   ms1.erase( ms1_Iter );

   // The following 2 lines would err as the iterator is const
   // ms1_cIter = ms1.begin( );
   // ms1.erase( ms1_cIter );

   ms1_cIter = ms1.begin( );
   cout << "The first element of ms1 is now " << *ms1_cIter << endl;
}
The first element of ms1 is 1
The first element of ms1 is now 2

multiset::cbegin

Aralıktaki ilk öğeyi ele alan bir const yineleyici döndürür.

const_iterator cbegin() const;

Dönüş Değeri

Aralığın const ilk öğesini veya boş aralığın sonunun hemen ötesindeki konumu gösteren çift yönlü erişim yineleyicisi (boş aralık için). cbegin() == cend()

Açıklamalar

değerinin cbegindönüş değeriyle, aralıktaki öğeler değiştirilemez.

Dönüş değerinin olduğunu const_iteratorgaranti etmek için üye işlevinin begin() yerine bu üye işlevini kullanabilirsiniz. Genellikle, aşağıdaki örnekte gösterildiği gibi otomatik tür kesinti anahtar sözcüğüyle birlikte kullanılır. Örnekte, ve cbegin()destekleyen herhangi bir türde begin() değiştirilebilir (non- const) kapsayıcısı olduğunu düşününContainer.

auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();

// i2 is Container<T>::const_iterator

multiset::cend

Bir const aralıktaki son öğenin hemen ötesindeki konumu ele alan bir yineleyici döndürür.

const_iterator cend() const;

Dönüş Değeri

Aralığın const sonunun hemen ötesine işaret eden çift yönlü erişim yineleyicisi.

Açıklamalar

cend bir yineleyicinin aralığının sonunu geçip geçmediğini test etmek için kullanılır.

Dönüş değerinin olduğunu const_iteratorgaranti etmek için üye işlevinin end() yerine bu üye işlevini kullanabilirsiniz. Genellikle, aşağıdaki örnekte gösterildiği gibi otomatik tür kesinti anahtar sözcüğüyle birlikte kullanılır. Örnekte, ve cend()destekleyen herhangi bir türde end() değiştirilebilir (non- const) kapsayıcısı olduğunu düşününContainer.

auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();

// i2 is Container<T>::const_iterator

tarafından cend döndürülen değer başvurulmamalıdır.

multiset::clear

öğesinin multisettüm öğelerini siler.

void clear();

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;

   ms1.insert( 1 );
   ms1.insert( 2 );

   cout << "The size of the multiset is initially "
        << ms1.size( ) << "." << endl;

   ms1.clear( );
   cout << "The size of the multiset after clearing is "
        << ms1.size( ) << "." << endl;
}
The size of the multiset is initially 2.
The size of the multiset after clearing is 0.

multiset::const_iterator

içindeki bir öğeyi multisetokuyabilen çift yönlü bir yineleyici sağlayan türconst.

typedef implementation-defined const_iterator;

Açıklamalar

Bir öğenin değerini değiştirmek için bir tür const_iterator kullanılamaz.

Örnek

kullanan const_iteratorbir örnek için begin örneğine bakın.

multiset::const_pointer

içindeki bir const öğeye işaretçi sağlayan tür multiset.

typedef typename allocator_type::const_pointer const_pointer;

Açıklamalar

Bir öğenin değerini değiştirmek için bir tür const_pointer kullanılamaz.

Çoğu durumda, bir nesnedeki öğelere erişmek için yineleyici multiset kullanılmalıdır.

multiset::const_reference

okuma ve işlem yapma const için içinde depolanan bir const öğeye başvuru sağlayan bir multiset tür.

typedef typename allocator_type::const_reference const_reference;

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;

   ms1.insert( 10 );
   ms1.insert( 20 );

   // Declare and initialize a const_reference &Ref1
   // to the 1st element
   const int &Ref1 = *ms1.begin( );

   cout << "The first element in the multiset is "
        << Ref1 << "." << endl;

   // The following line would cause an error because the
   // const_reference can't be used to modify the multiset
   // Ref1 = Ref1 + 5;
}
The first element in the multiset is 10.

multiset::const_reverse_iterator

içindeki multisetherhangi const bir öğeyi okuyabilen çift yönlü bir yineleyici sağlayan tür.

typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

Açıklamalar

Bir tür const_reverse_iterator bir öğenin değerini değiştiremez ve öğesini tersten yinelemek multiset için kullanılır.

Örnek

nasıl bildirilip kullanılacağına ilişkin bir örnek için rend örneğine const_reverse_iteratorbakın.

multiset::contains

içinde multisetbelirtilen anahtara sahip bir öğe olup olmadığını denetleyin.

bool contains(const Key& key) const;
template<class K> bool contains(const K& key) const;

Parametreler

K
Anahtarın türü.

key
Aranacak öğenin anahtar değeri.

Dönüş Değeri

true öğesi kapsayıcıda bulunursa; false yoksa.

Açıklamalar

contains() C++20 sürümünde yenidir. Bunu kullanmak için /std:c++20 veya üzeri derleyici seçeneğini belirtin.

template<class K> bool contains(const K& key) const yalnızca saydamsa key_compare aşırı yükleme çözümlemeye katılır. Daha fazla bilgi için bkz . İlişkili kapsayıcılarda heterojen arama.

Örnek

// Requires /std:c++20 or /std:c++latest
#include <set>
#include <iostream>

int main()
{
    std::multiset<int> theMultiSet = {1, 2};

    std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
    std::cout << theMultiSet.contains(2) << '\n';
    std::cout << theMultiSet.contains(3) << '\n';

    return 0;
}
true
false

multiset::count

Anahtarı parametre tarafından belirtilen anahtarla eşleşen bir multiset içindeki öğelerin sayısını döndürür.

size_type count(const Key& key) const;

Parametreler

key
öğesinden multiseteşleştirilecek öğelerin anahtarı.

Dönüş Değeri

Sıralama anahtarı parametre anahtarıyla multiset eşleşen öğe sayısı.

Açıklamalar

Üye işlevi aralıktaki x öğelerinin sayısını döndürür

[ lower_bound(key), upper_bound(key) )

Örnek

Aşağıdaki örnekte ::count member işlevinin multisetkullanımı gösterilmektedir.

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

int main()
{
    using namespace std;
    multiset<int> ms1;
    multiset<int>::size_type i;

    ms1.insert(1);
    ms1.insert(1);
    ms1.insert(2);

    // Elements don't need to be unique in multiset,
    // so duplicates are allowed and counted.
    i = ms1.count(1);
    cout << "The number of elements in ms1 with a sort key of 1 is: "
         << i << "." << endl;

    i = ms1.count(2);
    cout << "The number of elements in ms1 with a sort key of 2 is: "
         << i << "." << endl;

    i = ms1.count(3);
    cout << "The number of elements in ms1 with a sort key of 3 is: "
         << i << "." << endl;
}
The number of elements in ms1 with a sort key of 1 is: 2.
The number of elements in ms1 with a sort key of 2 is: 1.
The number of elements in ms1 with a sort key of 3 is: 0.

multiset::crbegin

Ters çevrilmiş bir çoklu kümedeki ilk öğeyi ele alan bir sabit yineleyici döndürür.

const_reverse_iterator crbegin() const;

Dönüş Değeri

Ters çevrilmiş bir çoklu kümedeki ilk öğeyi veya ters çevrilmemiş çoklu kümedeki son öğeyi ele alan en büyük ters çift yönlü yineleyici.

Açıklamalar

crbegin , bir ile kullanıldığında olduğu gibi ters çevrilmiş bir multisetmultiset ile kullanılır.

dönüş değeriyle crbeginmultiset nesne değiştirilemez.

crbegin geriye doğru yinelemek multiset için kullanılabilir.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::const_reverse_iterator ms1_crIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_crIter = ms1.crbegin( );
   cout << "The first element in the reversed multiset is "
        << *ms1_crIter << "." << endl;
}
The first element in the reversed multiset is 30.

multiset::crend

Ters çevrilmiş bir çoklu kümedeki son öğenin başarılı olduğu konumu ele alan bir sabit yineleyici döndürür.

const_reverse_iterator crend() const;

Dönüş Değeri

Ters çevrilmiş bir çoklu kümedeki son öğeyi (ters çevrilmemiş çoklu kümedeki ilk öğeden önce gelen konum) başarılı olan konumu ele alan en büyük ters çift yönlü yineleyici.

Açıklamalar

crend , aynı bir ile kullanıldığı gibi end ters çevrilmiş bir multisetçoklu küme ile kullanılır.

dönüş değeriyle crendmultiset nesne değiştirilemez.

crend , ters yineleyicinin sonuna multisetulaşıp ulaşmadığını test etmek için kullanılabilir.

tarafından crend döndürülen değer başvurulmamalıdır.

Örnek

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

int main() {
   using namespace std;
   multiset <int> ms1;
   multiset <int>::const_reverse_iterator ms1_crIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_crIter = ms1.crend( ) ;
   ms1_crIter--;
   cout << "The last element in the reversed multiset is "
        << *ms1_crIter << "." << endl;
}

multiset::difference_type

Yineleyiciler tarafından işaret edilen öğeler arasındaki bir aralıktaki öğelerinin multiset sayısını göstermek için kullanılabilecek imzalı bir tamsayı türü.

typedef typename allocator_type::difference_type difference_type;

Açıklamalar

difference_type, kapsayıcının yineleyicileri çıkarılırken veya artırılırken döndürülen türdür. difference_type genellikle yineleyiciler first ile lastarasındaki [ first, last) aralığındaki öğe sayısını temsil etmek için first kullanılır; öğesinin işaret ettiği öğeyi ve öğesinin işaret lastettiği öğeyi dahil etmek için değil, öğesine kadar olan öğe aralığını içerir.

Küme gibi geri alınabilir kapsayıcılar tarafından desteklenen çift yönlü yineleyici sınıfını içeren bir giriş yineleyicisinin gereksinimlerini karşılayan tüm yineleyiciler için kullanılabilir olsa difference_type da, yineleyiciler arasındaki çıkarma yalnızca vektör gibi rastgele erişimli bir kapsayıcı tarafından sağlanan rastgele erişim yineleyicileri tarafından desteklenir.

Örnek

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

int main( )
{
   using namespace std;

   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter, ms1_bIter, ms1_eIter;

   ms1.insert( 20 );
   ms1.insert( 10 );
   ms1.insert( 20 );

   ms1_bIter = ms1.begin( );
   ms1_eIter = ms1.end( );

   multiset <int>::difference_type   df_typ5, df_typ10, df_typ20;

   df_typ5 = count( ms1_bIter, ms1_eIter, 5 );
   df_typ10 = count( ms1_bIter, ms1_eIter, 10 );
   df_typ20 = count( ms1_bIter, ms1_eIter, 20 );

   // The keys, and hence the elements, of a multiset aren't unique
   cout << "The number '5' occurs " << df_typ5
        << " times in multiset ms1.\n";
   cout << "The number '10' occurs " << df_typ10
        << " times in multiset ms1.\n";
   cout << "The number '20' occurs " << df_typ20
        << " times in multiset ms1.\n";

   // Count the number of elements in a multiset
   multiset <int>::difference_type  df_count = 0;
   ms1_Iter = ms1.begin( );
   while ( ms1_Iter != ms1_eIter)
   {
      df_count++;
      ms1_Iter++;
   }

   cout << "The number of elements in the multiset ms1 is: "
        << df_count << "." << endl;
}
The number '5' occurs 0 times in multiset ms1.
The number '10' occurs 1 times in multiset ms1.
The number '20' occurs 2 times in multiset ms1.
The number of elements in the multiset ms1 is: 3.

multiset::emplace

Yerleştirme ipucuyla yerinde (hiçbir kopyalama veya taşıma işlemi gerçekleştirilmemiş) bir öğe ekler.

template <class... Args>
iterator emplace(Args&&... args);

Parametreler

args
içine eklenecek bir öğe oluşturmak için iletilen multisetbağımsız değişkenler.

Dönüş Değeri

Yeni eklenen öğeye bir yineleyici.

Açıklamalar

Bu işlev, kapsayıcı öğelerine yapılan başvurular geçersiz kılınmasa da kapsayıcıdaki tüm yineleyicileri geçersiz kılabilir.

Yer değiştirme sırasında özel durum oluşursa kapsayıcının durumu değiştirilmez.

Örnek

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

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: ";

    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{
    multiset<string> s1;

    s1.emplace("Anna");
    s1.emplace("Bob");
    s1.emplace("Carmine");

    cout << "multiset modified, now contains ";
    print(s1);
    cout << endl;

    s1.emplace("Bob");

    cout << "multiset modified, now contains ";
    print(s1);
    cout << endl;
}

multiset::emplace_hint

Yerleştirme ipucuyla yerinde (hiçbir kopyalama veya taşıma işlemi gerçekleştirilmemiş) bir öğe ekler.

template <class... Args>
iterator emplace_hint(
    const_iterator where,
    Args&&... args);

Parametreler

args
içine eklenecek bir öğe oluşturmak için iletilen multisetbağımsız değişkenler.

where
Doğru ekleme noktasını aramaya başlanması gereken yer. (Bu nokta hemen önüne wheregeçerse ekleme işlemi logaritmik saat yerine amorti edilmiş sabit sürede gerçekleşebilir.)

Dönüş Değeri

Yeni eklenen öğeye bir yineleyici.

Açıklamalar

Bu işlev, kapsayıcı öğelerine yapılan başvurular geçersiz kılınmasa da kapsayıcıdaki tüm yineleyicileri geçersiz kılabilir.

Yer değiştirme sırasında özel durum oluşursa kapsayıcının durumu değiştirilmez.

Kod örneği için bkz set::emplace_hint. .

multiset::empty

boş multiset olup olmadığını sınar.

bool empty() const;

Dönüş Değeri

truemultiset boşsa; false multiset yoksa.

Örnek

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

int main()
{
   using namespace std;
   multiset <int> ms1, ms2;
   ms1.insert ( 1 );

   if ( ms1.empty( ) )
      cout << "The multiset ms1 is empty." << endl;
   else
      cout << "The multiset ms1 is not empty." << endl;

   if ( ms2.empty( ) )
      cout << "The multiset ms2 is empty." << endl;
   else
      cout << "The multiset ms2 is not empty." << endl;
}
The multiset ms1 is not empty.
The multiset ms2 is empty.

multiset::end

past-the-end yineleyici döndürür.

const_iterator end() const;

iterator end();

Dönüş Değeri

Son zaman yineleyicisi. multiset boşsa, öğesini seçinmultiset::end() == multiset::begin().

Açıklamalar

end , yineleyicinin çoklu kümesinin sonunu geçip geçmediğini test etmek için kullanılır.

tarafından end döndürülen değer başvurulmamalıdır.

Kod örneği için bkz multiset::find. .

multiset::equal_range

Belirtilen anahtardan büyük bir anahtara sahip bir anahtarı olan içindeki ilk öğeye multiset ve anahtara eşit veya daha büyük bir anahtarla içindeki ilk öğeye multiset sırasıyla bir yineleyici çifti döndürür.

pair <const_iterator, const_iterator> equal_range (const Key& key) const;

pair <iterator, iterator> equal_range (const Key& key);

Parametreler

key
Aranmakta olan öğenin multiset sıralama anahtarıyla karşılaştırılacak bağımsız değişken anahtarı.

Dönüş Değeri

Birincisi anahtarın, ikincisi de anahtarın çifti olacak upper_bound şekilde lower_bound bir çift yineleyici.

Üye işlevi tarafından döndürülen bir çiftin pr ilk yineleyicisine erişmek için kullanın pr. firstve alt sınır yineleyicisini geri almak için *( pr. first). Üye işlevi tarafından döndürülen bir çiftin pr ikinci yineleyicisine erişmek için kullanın pr. secondve üst sınır yineleyicisini geri almak için *( pr. second).

Örnek

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

int main( )
{
   using namespace std;
   typedef multiset<int, less<int> > IntSet;
   IntSet ms1;
   multiset <int> :: const_iterator ms1_RcIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   pair <IntSet::const_iterator, IntSet::const_iterator> p1, p2;
   p1 = ms1.equal_range( 20 );

   cout << "The upper bound of the element with "
        << "a key of 20 in the multiset ms1 is: "
        << *( p1.second ) << "." << endl;

   cout << "The lower bound of the element with "
        << "a key of 20 in the multiset ms1 is: "
        << *( p1.first ) << "." << endl;

   // Compare the upper_bound called directly
   ms1_RcIter = ms1.upper_bound( 20 );
   cout << "A direct call of upper_bound( 20 ) gives "
        << *ms1_RcIter << "," << endl
        << "matching the 2nd element of the pair"
        << " returned by equal_range( 20 )." << endl;

   p2 = ms1.equal_range( 40 );

   // If no match is found for the key,
   // both elements of the pair return end( )
   if ( ( p2.first == ms1.end( ) ) && ( p2.second == ms1.end( ) ) )
      cout << "The multiset ms1 doesn't have an element "
              << "with a key less than 40." << endl;
   else
      cout << "The element of multiset ms1 with a key >= 40 is: "
                << *( p1.first ) << "." << endl;
}
The upper bound of the element with a key of 20 in the multiset ms1 is: 30.
The lower bound of the element with a key of 20 in the multiset ms1 is: 20.
A direct call of upper_bound( 20 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 20 ).
The multiset ms1 doesn't have an element with a key less than 40.

multiset::erase

Belirtilen konumlardan bir öğeyi veya bir multiset öğe aralığını kaldırır veya belirtilen bir anahtarla eşleşen öğeleri kaldırır.

iterator erase(
    const_iterator Where);

iterator erase(
    const_iterator First,
    const_iterator Last);

size_type erase(
    const key_type& Key);

Parametreler

Where
Kaldırılacak öğenin konumu.

First
Kaldırılacak ilk öğenin konumu.

Last
Kaldırılacak son öğenin hemen ötesinde konumlandırın.

key
Kaldırılacak öğelerin anahtar değeri.

Dönüş Değeri

İlk iki üye işlevi için, kaldırılan öğelerin ötesinde kalan ilk öğeyi belirten çift yönlü bir yineleyici veya böyle bir öğe yoksa öğesinin multiset sonu olan bir öğe.

Üçüncü üye işlevi için, öğesinden multisetkaldırılan öğe sayısını döndürür.

Açıklamalar

Kod örneği için bkz set::erase. .

multiset::find

Belirtilen anahtara eşdeğer bir anahtara sahip bir multiset öğenin konumuna başvuran bir yineleyici döndürür.

iterator find(const Key& key);

const_iterator find(const Key& key) const;

Parametreler

key
Aranmakta olan öğenin multiset sıralama anahtarıyla eşleştirilecek anahtar değeri.

Dönüş Değeri

Belirtilen anahtara sahip bir öğenin konumuna veya anahtar için eşleşme bulunamazsa ( multiset::end()) içindeki multiset son öğenin başarılı olduğu konuma başvuran bir yineleyici.

Açıklamalar

Üye işlevi, anahtarı karşılaştırılabilirlikten küçük bir ilişkiyi temel alan bir sıralamaya neden olan bir ikili koşul altındaki bağımsız değişkene key eşdeğer olan bir öğeye multiset başvuran bir yineleyici döndürür.

değerinin dönüş değeri find bir const_iteratormultiset öğesine atanmışsa nesnesi değiştirilemez. dönüş değeri find bir iteratormultiset öğesine atanmışsa nesnesi değiştirilebilir

Örnek

// compile with: /EHsc /W4 /MTd
#include <set>
#include <iostream>
#include <vector>
#include <string>

using namespace std;

template <typename T> void print_elem(const T& t) {
    cout << "(" << t << ") ";
}

template <typename T> void print_collection(const T& t) {
    cout << t.size() << " elements: ";

    for (const auto& p : t) {
        print_elem(p);
    }
    cout << endl;
}

template <typename C, class T> void findit(const C& c, T val) {
    cout << "Trying find() on value " << val << endl;
    auto result = c.find(val);
    if (result != c.end()) {
        cout << "Element found: "; print_elem(*result); cout << endl;
    } else {
        cout << "Element not found." << endl;
    }
}

int main()
{
    multiset<int> s1({ 40, 45 });
    cout << "The starting multiset s1 is: " << endl;
    print_collection(s1);

    vector<int> v;
    v.push_back(43);
    v.push_back(41);
    v.push_back(46);
    v.push_back(42);
    v.push_back(44);
    v.push_back(44); // attempt a duplicate

    cout << "Inserting the following vector data into s1: " << endl;
    print_collection(v);

    s1.insert(v.begin(), v.end());

    cout << "The modified multiset s1 is: " << endl;
    print_collection(s1);
    cout << endl;
    findit(s1, 45);
    findit(s1, 6);
}

multiset::get_allocator

oluşturmak için kullanılan ayırıcı nesnesinin multisetbir kopyasını döndürür.

allocator_type get_allocator() const;

Dönüş Değeri

tarafından multisetkullanılan ayırıcı.

Açıklamalar

sınıfı için ayırıcılar, sınıfın multiset depolamayı nasıl yöneteceğini belirtir. C++ Standart Kitaplığı kapsayıcı sınıfları ile sağlanan varsayılan ayırıcılar çoğu programlama gereksinimi için yeterlidir. Kendi ayırıcı sınıfınızı yazmak ve kullanmak gelişmiş bir C++ konusudur.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int>::allocator_type ms1_Alloc;
   multiset <int>::allocator_type ms2_Alloc;
   multiset <double>::allocator_type ms3_Alloc;
   multiset <int>::allocator_type ms4_Alloc;

   // The following lines declare objects
   // that use the default allocator.
   multiset <int> ms1;
   multiset <int, allocator<int> > ms2;
   multiset <double, allocator<double> > ms3;

   cout << "The number of integers that can be allocated"
        << endl << "before free memory is exhausted: "
        << ms2.max_size( ) << "." << endl;

   cout << "The number of doubles that can be allocated"
        << endl << "before free memory is exhausted: "
        << ms3.max_size( ) <<  "." << endl;

   // The following lines create a multiset ms4
   // with the allocator of multiset ms1
   ms1_Alloc = ms1.get_allocator( );
   multiset <int> ms4( less<int>( ), ms1_Alloc );
   ms4_Alloc = ms4.get_allocator( );

   // Two allocators are interchangeable if
   // storage allocated from each can be
   // deallocated with the other
   if( ms1_Alloc == ms4_Alloc )
   {
      cout << "Allocators are interchangeable."
           << endl;
   }
   else
   {
      cout << "Allocators are not interchangeable."
           << endl;
   }
}

multiset::insert

içine bir öğe veya öğe multisetaralığı ekler.

// (1) single element
pair<iterator, bool> insert(
    const value_type& Val);

// (2) single element, perfect forwarded
template <class ValTy>
pair<iterator, bool>
insert(
    ValTy&& Val);

// (3) single element with hint
iterator insert(
    const_iterator Where,
    const value_type& Val);

// (4) single element, perfect forwarded, with hint
template <class ValTy>
iterator insert(
    const_iterator Where,
    ValTy&& Val);

// (5) range
template <class InputIterator>
void insert(
    InputIterator First,
    InputIterator Last);

// (6) initializer list
void insert(
    initializer_list<value_type>
IList);

Parametreler

Val
içine eklenecek multisetöğenin değeri.

Where
Doğru ekleme noktasını aramaya başlanması gereken yer. (Bu nokta hemen önüne Wheregeçerse ekleme işlemi logaritmik saat yerine amorti edilmiş sabit sürede gerçekleşebilir.)

ValTy
öğesini oluşturmak value_typeiçin kullanabileceği bağımsız değişken türünü multiset belirten şablon parametresi ve bağımsız değişken olarak perfect-forwardsVal.

First
Kopyalanacak ilk öğenin konumu.

Last
Kopyalanacak son öğenin hemen ötesindeki konum.

1
1 nesne oluşturmak için kullanılabilecek bir türün öğelerine işaret eden bir öğesinin gereksinimlerini input_iterator_tag karşılayan şablon işlevi bağımsız değişkeni.

IList
initializer_list Öğelerin kopyalandığı yer.

Dönüş Değeri

(1) ve (2) tek öğeli ekleme üye işlevleri, yeni öğenin içine eklendiği multisetkonuma bir yineleyici döndürür.

İpucuyla tek öğeli üye işlevleri (3) ve (4), yeni öğenin içine multiseteklendiği konumu gösteren bir yineleyici döndürür.

Açıklamalar

Bu işlev tarafından hiçbir işaretçi veya başvuru geçersiz kılınmamış, ancak kapsayıcıdaki tüm yineleyicileri geçersiz kılabilir.

Yalnızca bir öğenin eklenmesi sırasında özel durum oluşursa kapsayıcının durumu değiştirilmez. Birden çok öğe eklenirken, bir özel durum oluşturulursa kapsayıcı belirtilmemiş ancak geçerli bir durumda bırakılır.

value_type Kapsayıcının türü, kapsayıcıya ait olan bir tür tanımıdır ve küme multiset<V>::value_type için türüdürconst V.

Aralık üye işlevi (5), öğe değerlerinin dizisini aralıktaki [First, Last)bir multiset yineleyici tarafından adreslenen her öğeye karşılık gelen bir öğesine ekler; bu nedenle eklenmezLast. Kapsayıcı üyesi işlevi end() , kapsayıcıdaki son öğeden hemen sonraki konuma başvurur; örneğin, deyimi s.insert(v.begin(), v.end()); tüm öğelerini v içine sekler.

Başlatıcı listesi üye işlevi (6), öğeleri içine multisetkopyalamak için bir initializer_list kullanır.

Yerinde inşa edilmiş bir öğenin eklenmesi için (başka bir deyişle, hiçbir kopyalama veya taşıma işlemi gerçekleştirilmez), bkz multiset::emplace . ve multiset::emplace_hint.

Örnek

// multiset_insert.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: ";

    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{
    // insert single values
    multiset<int> s1;
    // call insert(const value_type&) version
    s1.insert({ 1, 10 });
    // call insert(ValTy&&) version
    s1.insert(20);

    cout << "The original multiset values of s1 are:" << endl;
    print(s1);

    // intentionally attempt a duplicate, single element
    s1.insert(1);
    cout << "The modified multiset values of s1 are:" << endl;
    print(s1);
    cout << endl;

    // single element, with hint
    s1.insert(s1.end(), 30);
    cout << "The modified multiset values of s1 are:" << endl;
    print(s1);
    cout << endl;

    // The templatized version inserting a jumbled range
    multiset<int> s2;
    vector<int> v;
    v.push_back(43);
    v.push_back(294);
    v.push_back(41);
    v.push_back(330);
    v.push_back(42);
    v.push_back(45);

    cout << "Inserting the following vector data into s2:" << endl;
    print(v);

    s2.insert(v.begin(), v.end());

    cout << "The modified multiset values of s2 are:" << endl;
    print(s2);
    cout << endl;

    // The templatized versions move-constructing elements
    multiset<string>  s3;
    string str1("blue"), str2("green");

    // single element
    s3.insert(move(str1));
    cout << "After the first move insertion, s3 contains:" << endl;
    print(s3);

    // single element with hint
    s3.insert(s3.end(), move(str2));
    cout << "After the second move insertion, s3 contains:" << endl;
    print(s3);
    cout << endl;

    multiset<int> s4;
    // Insert the elements from an initializer_list
    s4.insert({ 4, 44, 2, 22, 3, 33, 1, 11, 5, 55 });
    cout << "After initializer_list insertion, s4 contains:" << endl;
    print(s4);
    cout << endl;
}

multiset::iterator

bir içindeki herhangi bir öğeyi okuyabilen sabit bir çift yönlü yineleyici sağlayan tür multiset.

typedef implementation-defined iterator;

Örnek

bir bildirme ve kullanma iteratorörneği için başlangıç örneğine bakın.

multiset::key_comp

içindeki anahtarları sıralamak için kullanılan karşılaştırma nesnesinin bir multisetkopyasını alır.

key_compare key_comp() const;

Dönüş Değeri

bir öğesinin multiset şablon parametresi Compareolan öğelerini sıralamak için kullandığı işlev nesnesini döndürür.

hakkında Comparedaha fazla bilgi için, çok kümeli Sınıf konusunun Açıklamalar bölümüne bakın.

Açıklamalar

Depolanan nesne üye işlevini tanımlar:

bool işleci( const Key&x, const Key&y);

x, sıralama düzeninde kesinlikle y'nin önüne gelirse true döndürür.

Hem hem value_compare dekey_compare, şablon parametresinin Compareeş anlamlılarıdır. Her iki tür de sınıf kümesi ve aynı olan çoklu küme için, sınıf eşlemesi ve çoklu eşleme ile uyumluluk için sağlanır ve burada ayrıdırlar.

Örnek

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

int main( )
{
   using namespace std;

   multiset <int, less<int> > ms1;
   multiset <int, less<int> >::key_compare kc1 = ms1.key_comp( ) ;
   bool result1 = kc1( 2, 3 ) ;
   if( result1 == true )
   {
      cout << "kc1( 2,3 ) returns value of true, "
           << "where kc1 is the function object of s1."
           << endl;
   }
   else
   {
      cout << "kc1( 2,3 ) returns value of false "
           << "where kc1 is the function object of ms1."
           << endl;
   }

   multiset <int, greater<int> > ms2;
   multiset <int, greater<int> >::key_compare kc2 = ms2.key_comp( ) ;
   bool result2 = kc2( 2, 3 ) ;
   if( result2 == true )
   {
      cout << "kc2( 2,3 ) returns value of true, "
           << "where kc2 is the function object of ms2."
           << endl;
   }
   else
   {
      cout << "kc2( 2,3 ) returns value of false, "
           << "where kc2 is the function object of ms2."
           << endl;
   }
}
kc1( 2,3 ) returns value of true, where kc1 is the function object of s1.
kc2( 2,3 ) returns value of false, where kc2 is the function object of ms2.

multiset::key_compare

içindeki iki öğeye multisetgöre sırasını belirlemek için iki sıralama anahtarını karşılaştırabilen bir işlev nesnesi sağlayan tür.

typedef Compare key_compare;

Açıklamalar

key_compare , şablon parametresinin Compareeş anlamlısıdır.

hakkında Comparedaha fazla bilgi için Sınıf konusunun Açıklamalar bölümüne multiset bakın.

Örnek

bildirme ve kullanma key_compareörneği için key_comp örneğine bakın.

multiset::key_type

içindeki iki öğesinin multisetgöreli sırasını belirlemek için sıralama anahtarlarını karşılaştırabilen bir işlev nesnesi sağlayan tür.

typedef Key key_type;

Açıklamalar

key_type , şablon parametresinin Keyeş anlamlısıdır.

hakkında Keydaha fazla bilgi için Sınıf konusunun Açıklamalar bölümüne multiset bakın.

Örnek

bildirme ve kullanma key_typeörneği için value_type örneğine bakın.

multiset::lower_bound

Belirtilen anahtara eşit veya bundan büyük bir anahtara sahip bir içindeki ilk öğeye multiset bir yineleyici döndürür.

const_iterator lower_bound(const Key& key) const;

iterator lower_bound(const Key& key);

Parametreler

key
Aranmakta olan öğenin multiset sıralama anahtarıyla karşılaştırılacak bağımsız değişken anahtarı.

Dönüş Değeri

bir iterator veya const_iterator içindeki bir öğenin multiset konumunu, bağımsız değişken anahtarına eşit veya ondan büyük bir anahtarla ya da anahtar için eşleşme bulunamazsa içindeki multiset son öğeyi tamamlayan konumu giderir.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int> :: const_iterator ms1_AcIter, ms1_RcIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_RcIter = ms1.lower_bound( 20 );
   cout << "The element of multiset ms1 with a key of 20 is: "
        << *ms1_RcIter << "." << endl;

   ms1_RcIter = ms1.lower_bound( 40 );

   // If no match is found for the key, end( ) is returned
   if ( ms1_RcIter == ms1.end( ) )
      cout << "The multiset ms1 doesn't have an element "
           << "with a key of 40." << endl;
   else
      cout << "The element of multiset ms1 with a key of 40 is: "
           << *ms1_RcIter << "." << endl;

   // The element at a specific location in the multiset can be
   // found using a dereferenced iterator addressing the location
   ms1_AcIter = ms1.end( );
   ms1_AcIter--;
   ms1_RcIter = ms1.lower_bound( *ms1_AcIter );
   cout << "The element of ms1 with a key matching "
        << "that of the last element is: "
        << *ms1_RcIter << "." << endl;
}
The element of multiset ms1 with a key of 20 is: 20.
The multiset ms1 doesn't have an element with a key of 40.
The element of ms1 with a key matching that of the last element is: 30.

multiset::max_size

değerinin uzunluk üst sınırını multisetdöndürür.

size_type max_size() const;

Dönüş Değeri

mümkün olan en uzun uzunluk multiset.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::size_type i;

   i = ms1.max_size( );
   cout << "The maximum possible length "
        << "of the multiset is " << i << "." << endl;
}

multiset::multiset

Boş olan veya başka multisetbir öğesinin tümünün veya bir bölümünün kopyası olan bir multiset oluşturur.

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);

Parametreler

Al
Varsayılan olarak Allocatorolan bu çok kümeli nesne için kullanılacak depolama ayırıcı sınıfı.

Comp
türündeki const Compare öğeleri multisetsıralamak için kullanılan karşılaştırma işlevidir ve varsayılan olarak Compareolarak kullanılır.

Right
multiset yapılı çoklu kümenin bir kopya olmasıdır.

First
Kopyalanacak öğe aralığındaki ilk öğenin konumu.

Last
Kopyalanacak öğe aralığının ötesindeki ilk öğenin konumu.

IList
initializer_list Öğelerin kopyalandığı yer.

Açıklamalar

Tüm oluşturucular için multiset bellek depolamayı yöneten ve daha sonra çağrılarak get_allocatordöndürülebilen bir ayırıcı nesnesi türünü depolar. Ayırıcı parametresi genellikle sınıf bildirimlerinde ve alternatif ayırıcıları değiştirmek için kullanılan önişlem makrolarında atlanır.

Tüm oluşturucular çoklu kümelerini başlatır.

Tüm oluşturucular, anahtarları multiset arasında bir sıra oluşturmak için kullanılan ve daha sonra çağrılarak key_compdöndürülebilecek Compare türünde bir işlev nesnesi depolar.

İlk üç oluşturucu boş bir ilk çoklu küme, ikincisi öğelerin sırasını oluştururken kullanılacak karşılaştırma işlevinin türünü (Comp) ve kullanılacak ayırıcı türünü (Al) açıkça belirten üçüncü bir çoklu küme belirtir. anahtar sözcüğü explicit belirli türdeki otomatik tür dönüştürmelerini gizler.

Dördüncü oluşturucu, öğesinin multiset Rightbir kopyasını belirtir.

Beşinci oluşturucu taşıyarak Rightöğesinin multiset bir kopyasını belirtir.

6., 7. ve 8. oluşturucular, öğelerin kopyalandığı bir initializer_list belirtir.

Sonraki üç oluşturucu, karşılaştırma işlevinin ve ayırıcının türünü belirtirken açıklığı artırarak aralığını [First, Last) multiset kopyalar.

Örnek

// 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 greater 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;
}

multiset::operator=

Bunun multiset öğelerini başka bir multisetöğesindeki öğeleri kullanarak değiştirir.

multiset& operator=(const multiset& right);

multiset& operator=(multiset&& right);

Parametreler

Right
multiset Öğelerin kopyalandığı veya taşındığı yer.

Açıklamalar

operator= kullanılan başvuru türüne (lvalue veya rvalue) bağlı olarak içindeki öğelerini Right bu multisetiçine kopyalar veya taşır. Yürütmelerden önce operator= bu multiset öğe atılır.

Örnek

// multiset_operator_as.cpp
// compile with: /EHsc
#include <multiset>
#include <iostream>

int main( )
   {
   using namespace std;
   multiset<int> v1, v2, v3;
   multiset<int>::iterator iter;

   v1.insert(10);

   cout << "v1 = " ;
   for (iter = v1.begin(); iter != v1.end(); iter++)
      cout << *iter << " ";
   cout << endl;

   v2 = v1;
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << *iter << " ";
   cout << endl;

// move v1 into v2
   v2.clear();
   v2 = move(v1);
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << *iter << " ";
   cout << endl;
   }

multiset::pointer

içindeki bir öğeye işaretçi sağlayan tür multiset.

typedef typename allocator_type::pointer pointer;

Açıklamalar

Bir öğenin değerini değiştirmek için bir tür pointer kullanılabilir.

Çoğu durumda, bir nesnedeki öğelere erişmek için yineleyici multiset kullanılmalıdır.

multiset::rbegin

Ters çevrilmiş bir çoklu kümedeki ilk öğeyi ele alan bir yineleyici döndürür.

const_reverse_iterator rbegin() const;

reverse_iterator rbegin();

Dönüş Değeri

Ters çevrilmiş multiset bir içindeki ilk öğeyi veya ters çevrilmemiş multisetiçindeki son öğeyi ele alan ters çift yönlü yineleyici.

Açıklamalar

rbegin , rbegin'in ile kullanıldığı gibi ters çevrilmiş multiset bir multisetile kullanılır.

değerinin dönüş değeri rbegin öğesine const_reverse_iteratormultiset atanmışsa nesnesi değiştirilemez. değerinin dönüş değeri rbegin bir reverse_iteratormultiset öğesine atanmışsa nesnesi değiştirilebilir.

rbegin geriye doğru yinelemek multiset için kullanılabilir.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;
   multiset <int>::reverse_iterator ms1_rIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_rIter = ms1.rbegin( );
   cout << "The first element in the reversed multiset is "
        << *ms1_rIter << "." << endl;

   // begin can be used to start an iteration
   // through a multiset in a forward order
   cout << "The multiset is:";
   for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << endl;

   // rbegin can be used to start an iteration
   // through a multiset in a reverse order
   cout << "The reversed multiset is:";
   for ( ms1_rIter = ms1.rbegin( ) ; ms1_rIter != ms1.rend( ); ms1_rIter++ )
      cout << " " << *ms1_rIter;
   cout << endl;

   // a multiset element can be erased by dereferencing to its key
   ms1_rIter = ms1.rbegin( );
   ms1.erase ( *ms1_rIter );

   ms1_rIter = ms1.rbegin( );
   cout << "After the erasure, the first element "
        << "in the reversed multiset is "<< *ms1_rIter << "."
        << endl;
}
The first element in the reversed multiset is 30.
The multiset is: 10 20 30
The reversed multiset is: 30 20 10
After the erasure, the first element in the reversed multiset is 20.

multiset::reference

içinde depolanan bir öğeye başvuru sağlayan tür multiset.

typedef typename allocator_type::reference reference;

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;

   ms1.insert( 10 );
   ms1.insert( 20 );

   // Declare and initialize a reference &Ref1 to the 1st element
   const int &Ref1 = *ms1.begin( );

   cout << "The first element in the multiset is "
        << Ref1 << "." << endl;
}
The first element in the multiset is 10.

multiset::rend

Ters çevrilmiş multisetbir içindeki son öğeyi başaran konumu ele alan bir yineleyici döndürür.

const_reverse_iterator rend() const;

reverse_iterator rend();

Dönüş Değeri

Ters çevrilmiş bir öğedeki son öğeyi (ters multiset çevrilmemiş multisetöğedeki ilk öğeden önce gelen konum) başarılı olan konumu ele alan ters çift yönlü yineleyici.

Açıklamalar

rend , aynı bir ile kullanıldığı gibi end ters çevrilmiş bir multisetçoklu küme ile kullanılır.

değerinin dönüş değeri rend öğesine const_reverse_iteratormultiset atanmışsa nesnesi değiştirilemez. değerinin dönüş değeri rend bir reverse_iteratormultiset öğesine atanmışsa nesnesi değiştirilebilir.

rend bir ters yineleyicinin çoklu kümesinin sonuna ulaşıp ulaşmadığını test etmek için kullanılabilir.

tarafından rend döndürülen değer başvurulmamalıdır.

Örnek

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

int main() {
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;
   multiset <int>::reverse_iterator ms1_rIter;
   multiset <int>::const_reverse_iterator ms1_crIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_rIter = ms1.rend( ) ;
   ms1_rIter--;
   cout << "The last element in the reversed multiset is "
        << *ms1_rIter << "." << endl;

   // end can be used to terminate an iteration
   // through a multiset in a forward order
   cout << "The multiset is: ";
   for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << *ms1_Iter << " ";
   cout << "." << endl;

   // rend can be used to terminate an iteration
   // through a multiset in a reverse order
   cout << "The reversed multiset is: ";
   for ( ms1_rIter = ms1.rbegin( ) ; ms1_rIter != ms1.rend( ); ms1_rIter++ )
      cout << *ms1_rIter << " ";
   cout << "." << endl;

   ms1_rIter = ms1.rend( );
   ms1_rIter--;
   ms1.erase ( *ms1_rIter );

   ms1_rIter = ms1.rend( );
   --ms1_rIter;
   cout << "After the erasure, the last element in the "
        << "reversed multiset is " << *ms1_rIter << "." << endl;
}

multiset::reverse_iterator

Ters çevrilmiş bir çoklu kümedeki bir öğeyi okuyabilen veya değiştirebilen çift yönlü bir yineleyici sağlayan tür.

typedef std::reverse_iterator<iterator> reverse_iterator;

Açıklamalar

reverse_iterator Türü tersten yinelemek multiset için kullanılır.

Örnek

nasıl bildirilip kullanılacağına reverse_iteratorilişkin bir örnek için rbegin örneğine bakın.

multiset::size

içindeki multisetöğe sayısını döndürür.

size_type size() const;

Dönüş Değeri

geçerli uzunluğu multiset.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int> :: size_type i;

   ms1.insert( 1 );
   i = ms1.size( );
   cout << "The multiset length is " << i << "." << endl;

   ms1.insert( 2 );
   i = ms1.size( );
   cout << "The multiset length is now " << i << "." << endl;
}
The multiset length is 1.
The multiset length is now 2.

multiset::size_type

içindeki öğe sayısını temsil eden işaretsiz bir multisettamsayı türü.

typedef typename allocator_type::size_type size_type;

Örnek

Nasıl bildirilip kullanılacağına ilişkin örnek için size bkz. örnek size_type

multiset::swap

İki çoklu kümenin öğelerini değiştirir.

void swap(
    multiset<Key, Compare, Allocator>& right);

Parametreler

Right
Hedef çoklu kümeyle değiştirilecek öğeleri sağlayan çoklu küme bağımsız değişkeni.

Açıklamalar

Üye işlevi, öğeleri değiştirilmekte olan iki çoklu kümedeki öğeleri belirten hiçbir başvuruyu, işaretçiyi veya yineleyiciyi geçersiz kılmaz.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1, ms2, ms3;
   multiset <int>::iterator ms1_Iter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );
   ms2.insert( 100 );
   ms2.insert( 200 );
   ms3.insert( 300 );

   cout << "The original multiset ms1 is:";
   for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << "." << endl;

   // This is the member function version of swap
   ms1.swap( ms2 );

   cout << "After swapping with ms2, list ms1 is:";
   for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << "." << endl;

   // This is the specialized template version of swap
   swap( ms1, ms3 );

   cout << "After swapping with ms3, list ms1 is:";
   for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout   << "." << endl;
}
The original multiset ms1 is: 10 20 30.
After swapping with ms2, list ms1 is: 100 200.
After swapping with ms3, list ms1 is: 300.

multiset::upper_bound

Belirtilen anahtardan büyük bir anahtarla içindeki ilk öğeye multiset bir yineleyici döndürür.

const_iterator upper_bound(const Key& key) const;

iterator upper_bound(const Key& key);

Parametreler

key
Aranmakta olan öğenin multiset sıralama anahtarıyla karşılaştırılacak bağımsız değişken anahtarı.

Dönüş Değeri

Bir yineleyici veya const_iterator içindeki bir öğenin multiset konumunu bağımsız değişken anahtarından daha büyük bir anahtarla ele alan veya anahtar için eşleşme bulunamazsa içindeki multiset son öğenin başarılı olduğu konumu ele alan bir yineleyici.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int> :: const_iterator ms1_AcIter, ms1_RcIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_RcIter = ms1.upper_bound( 20 );
   cout << "The first element of multiset ms1 with a key greater "
           << "than 20 is: " << *ms1_RcIter << "." << endl;

   ms1_RcIter = ms1.upper_bound( 30 );

   // If no match is found for the key, end( ) is returned
   if ( ms1_RcIter == ms1.end( ) )
      cout << "The multiset ms1 doesn't have an element "
              << "with a key greater than 30." << endl;
   else
      cout << "The element of multiset ms1 with a key > 40 is: "
           << *ms1_RcIter << "." << endl;

   // The element at a specific location in the multiset can be
   // found using a dereferenced iterator addressing the location
   ms1_AcIter = ms1.begin( );
   ms1_RcIter = ms1.upper_bound( *ms1_AcIter );
   cout << "The first element of ms1 with a key greater than"
        << endl << "that of the initial element of ms1 is: "
        << *ms1_RcIter << "." << endl;
}
The first element of multiset ms1 with a key greater than 20 is: 30.
The multiset ms1 doesn't have an element with a key greater than 30.
The first element of ms1 with a key greater than
that of the initial element of ms1 is: 20.

multiset::value_comp

içindeki öğe değerlerini sıralamak için kullanılan karşılaştırma nesnesinin bir multisetkopyasını alır.

value_compare value_comp() const;

Dönüş Değeri

bir öğesinin multiset şablon parametresi Compareolan öğelerini sıralamak için kullandığı işlev nesnesini döndürür.

hakkında Comparedaha fazla bilgi için Sınıf konusunun Açıklamalar bölümüne multiset bakın.

Açıklamalar

Depolanan nesne üye işlevini tanımlar:

bool işleci( const Key& _xValconst Key&_yVal;

, önceyse _xVal true döndürür ve sıralama düzeninde buna eşit _yVal değildir.

Hem hem value_compare dekey_compare, şablon parametresinin Compareeş anlamlılarıdır. Her iki tür de, multisetve sınıfların eşlemiyle uyumluluk için ve sınıfların aynı olduğu sınıflar için sağlanır ve multimapburada ayrıdırlar.

Örnek

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

int main( )
{
   using namespace std;

   multiset <int, less<int> > ms1;
   multiset <int, less<int> >::value_compare vc1 = ms1.value_comp( );
   bool result1 = vc1( 2, 3 );
   if( result1 == true )
   {
      cout << "vc1( 2,3 ) returns value of true, "
           << "where vc1 is the function object of ms1."
           << endl;
   }
   else
   {
      cout << "vc1( 2,3 ) returns value of false, "
           << "where vc1 is the function object of ms1."
           << endl;
   }

   set <int, greater<int> > ms2;
   set<int, greater<int> >::value_compare vc2 = ms2.value_comp( );
   bool result2 = vc2( 2, 3 );
   if( result2 == true )
   {
      cout << "vc2( 2,3 ) returns value of true, "
           << "where vc2 is the function object of ms2."
           << endl;
   }
   else
   {
      cout << "vc2( 2,3 ) returns value of false, "
           << "where vc2 is the function object of ms2."
           << endl;
   }
}
vc1( 2,3 ) returns value of true, where vc1 is the function object of ms1.
vc2( 2,3 ) returns value of false, where vc2 is the function object of ms2.

multiset::value_compare

içinde göreli düzenlerini multisetbelirlemek için iki sıralama anahtarını karşılaştırabilen bir işlev nesnesi sağlayan tür.

typedef key_compare value_compare;

Açıklamalar

value_compare , şablon parametresinin Compareeş anlamlısıdır.

Hem hem value_compare dekey_compare, şablon parametresinin Compareeş anlamlılarıdır. Her iki tür de, multisetve sınıfların eşlemiyle uyumluluk için ve sınıfların aynı olduğu sınıflar için sağlanır ve multimapburada ayrıdırlar.

hakkında Comparedaha fazla bilgi için, çok kümeli Sınıf konusunun Açıklamalar bölümüne bakın.

Örnek

bildirme ve kullanma value_compareörneği için value_comp örneğine bakın.

multiset::value_type

Kapasitede değer olarak öğe olarak multiset depolanan bir nesneyi tanımlayan tür.

typedef Key value_type;

Açıklamalar

value_type , şablon parametresinin Keyeş anlamlısıdır.

Hem hem value_type dekey_type, şablon parametresinin Keyeş anlamlılarıdır. Her iki tür de sınıf kümesi ve aynı olan çoklu küme için, sınıf eşlemesi ve çoklu eşleme ile uyumluluk için sağlanır ve burada ayrıdırlar.

hakkında Keydaha fazla bilgi için konunun Açıklamalar bölümüne bakın.

Örnek

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

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;

   multiset <int> :: value_type svt_Int;   // Declare value_type
   svt_Int = 10;             // Initialize value_type

   multiset <int> :: key_type skt_Int;   // Declare key_type
   skt_Int = 20;             // Initialize key_type

   ms1.insert( svt_Int );         // Insert value into s1
   ms1.insert( skt_Int );         // Insert key into s1

   // a multiset accepts key_types or value_types as elements
   cout << "The multiset has elements:";
   for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << "." << endl;
}
The multiset has elements: 10 20.

Ayrıca bkz.

Konteynerler
C++ Standart Kitaplığında İş Parçacığı Güvenliği
C++ Standart Kitaplığı Başvurusu