📜  C++标准模板库(STL)中的多集

📅  最后修改于: 2021-05-30 03:59:15             🧑  作者: Mango

多重集是类似于set的一种关联容器,不同之处在于多个元素可以具有相同的值。
与多集相关的一些基本功能:
begin()–将迭代器返回到多集中的第一个元素
end()–返回迭代器,该迭代器返回多元素集中最后一个元素之后的理论元素
size()–返回多重集中的元素数量
max_size()–返回多重集可以容纳的最大元素数
empty()–返回多重集是否为空

执行:

CPP
#include 
#include 
#include 
 
using namespace std;
 
int main()
{
    // empty multiset container
    multiset  > gquiz1;       
 
    // insert elements in random order
    gquiz1.insert(40);
    gquiz1.insert(30);
    gquiz1.insert(60);
    gquiz1.insert(20);
    gquiz1.insert(50);
     
    // 50 will be added again to
    // the multiset unlike set
    gquiz1.insert(50);
    gquiz1.insert(10);
 
    // printing multiset gquiz1
    multiset  > :: iterator itr;
    cout << "\nThe multiset gquiz1 is : \n";
    for (itr = gquiz1.begin(); itr
         != gquiz1.end(); ++itr)
    {
        cout << *itr << " ";
    }
    cout << endl;
 
    // assigning the elements from gquiz1 to gquiz2
    multiset  gquiz2(gquiz1.begin()
                          , gquiz1.end());
 
    // print all elements of the multiset gquiz2
    cout << "\nThe multiset gquiz2 \n"
             "after assign from gquiz1 is : \n";
    for (itr = gquiz2.begin(); itr
         != gquiz2.end(); ++itr)
    {
        cout << *itr <<" ";
    }
    cout << endl;
 
    // remove all elements up to element
   // with value 30 in gquiz2
    cout << "\ngquiz2 after removal \n"
            "of elements less than 30 : \n";
    gquiz2.erase(gquiz2.begin()
                 , gquiz2.find(30));
    for (itr = gquiz2.begin(); itr
         != gquiz2.end(); ++itr)
    {
        cout << *itr << " " ;
    }
 
    // remove all elements with value 50 in gquiz2
    int num;
    num = gquiz2.erase(50);
    cout << "\ngquiz2.erase(50) : \n";
    cout << num << " removed \n" ;
    for (itr = gquiz2.begin(); itr
         != gquiz2.end(); ++itr)
    {
        cout  << *itr << " ";
    }
 
    cout << endl;
 
    //lower bound and upper bound for multiset gquiz1
    cout << "\ngquiz1.lower_bound(40) : \n"
         << *gquiz1.lower_bound(40) << endl;
    cout << "gquiz1.upper_bound(40) : \n"
         << *gquiz1.upper_bound(40) << endl;
 
    //lower bound and upper bound for multiset gquiz2
    cout << "gquiz2.lower_bound(40) : \n"
         << *gquiz2.lower_bound(40) << endl;
    cout << "gquiz2.upper_bound(40) : \n"
         << *gquiz2.upper_bound(40) << endl;
          
         return 0;
 
}


C++
#include 
using namespace std;
 
int main()
{
    multiset a;
    a.insert(10);
    a.insert(10);
    a.insert(10);
 
    // it will give output 3
    cout << a.count(10) << endl;
 
    // removing single instance from multiset
   
    // it will remove only one value of
    // 10 from multiset
    a.erase(a.find(10));
    
    // it will give output 2
    cout << a.count(10) << endl;
 
    // removing all instance of element from multiset
    // it will remove all instance of value 10
    a.erase(10);
   
    // it will give output 0 because all
    // instance of value is removed from
    // mulitset
    cout << a.count(10)
         << endl;
 
    return 0;
}


输出
The multiset gquiz1 is : 
60 50 50 40 30 20 10 

The multiset gquiz2 
after assign from gquiz1 is : 
10 20 30 40 50 50 60 

gquiz2 after removal 
of elements less than 30 : 
30 40 50 50 60 
gquiz2.erase(50) : 
2 removed 
30 40 60 

gquiz1.lower_bound(40) : 
40
gquiz1.upper_bound(40) : 
30
gquiz2.lower_bound(40) : 
40
gquiz2.upper_bound(40) : 
60

从多集中删除具有相同值的元素

  • a.erase()–从多集中删除具有相同值的所有元素实例
  • a.erase(a.find())–从多集中删除具有相同值的元素的仅一个实例

C++

#include 
using namespace std;
 
int main()
{
    multiset a;
    a.insert(10);
    a.insert(10);
    a.insert(10);
 
    // it will give output 3
    cout << a.count(10) << endl;
 
    // removing single instance from multiset
   
    // it will remove only one value of
    // 10 from multiset
    a.erase(a.find(10));
    
    // it will give output 2
    cout << a.count(10) << endl;
 
    // removing all instance of element from multiset
    // it will remove all instance of value 10
    a.erase(10);
   
    // it will give output 0 because all
    // instance of value is removed from
    // mulitset
    cout << a.count(10)
         << endl;
 
    return 0;
}

输出
3
2
0

多重集功能列表:

  • begin()–将迭代器返回到多集中的第一个元素。
  • end()–将迭代器返回到理论元素,该元素在多集中的最后一个元素之后。
  • size()–返回多重集中的元素数。
  • max_size()–返回多重集可以容纳的最大元素数。
  • empty()–返回多重集是否为空。
  • 对insert(const g)–将新元素“ g”添加到多集。
  • 迭代器插入(迭代器位置,常量g)–在迭代器指向的位置添加新元素“ g”。
  • 擦除(迭代器位置)–删除迭代器指向的位置上的元素。
  • delete(const g)–从多重集中删除值“ g”。
  • clear()–从多重集中删除所有元素。
  • key_comp()/ value_comp()–返回确定多重集合中元素排序方式的对象(默认为'<‘)。
  • find(const g)–如果存在,则返回多集中元素’g’的迭代器,否则返回迭代器结束。
  • count(const g)–返回与多集中元素“ g”匹配的数目。
  • lower_bound(const g)–将迭代器返回到等效于’g’的第一个元素,或者如果找到,则肯定不会出现在多重集中的元素’g’之前,否则返回迭代器结束。
  • upper_bound(const g)–将迭代器返回到等效于’g’的第一个元素,或者如果找到,则肯定会在多重集中的元素’g’之后,否则返回迭代器结束。
  • multiset :: swap()–此函数用于交换两个多集的内容,但是集的类型必须相同,尽管大小可能有所不同。
  • multiset :: 运算符= –此运算符用于通过替换现有内容将新内容分配给容器。
  • multiset :: emplace()–此函数用于将新元素插入多集容器。
  • multiset equal_range()–返回成对的迭代器。该对是指包含容器中所有具有等于k的键的元素的范围。
  • multiset :: emplace_hint()–在多重集中插入一个新元素。
  • multiset :: rbegin()–返回一个反向迭代器,指向多重集容器中的最后一个元素。
  • multiset :: rend()–返回一个反向迭代器,指向多重集容器中第一个元素之前的理论元素。
  • multiset :: cbegin()–返回指向容器中第一个元素的常量迭代器。
  • multiset :: cend()–返回一个常量迭代器,该迭代器指向容器中最后一个元素之后的位置。
  • multiset :: crbegin()–返回一个常量反向迭代器,指向容器中的最后一个元素。
  • multiset :: crend()–返回一个常量反向迭代器,该迭代器指向容器中第一个元素之前的位置。
  • multiset :: get_allocator()–返回与多集关联的分配器对象的副本。

最近关于Multiset的文章

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”