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

📅  最后修改于: 2021-05-30 13:08:28             🧑  作者: Mango

Multimap与map相似,只是多个元素可以具有相同的键。同样,在这种情况下,键值和映射值对也不必唯一。关于multimap的重要注意事项是multimap始终将所有键保持在已排序的顺序中。 multimap的这些属性使其在竞争性编程中非常有用。
与多图关联的一些基本功能:

  • begin() –将迭代器返回到Multimap中的第一个元素
  • end() –返回迭代器,该迭代器返回到multimap中最后一个元素之后的理论元素
  • size() –返回多图中元素的数量
  • max_size() –返回多图可以容纳的最大元素数
  • empty() –返回多图是否为空
  • pair insert(keyvalue,multimapvalue )–向多图添加新元素

C++实现以说明上述功能

CPP
#include 
#include 
#include 
 
using namespace std;
 
int main()
{
    multimap  gquiz1; // empty multimap container
 
    // insert elements in random order
    gquiz1.insert(pair  (1, 40));
    gquiz1.insert(pair  (2, 30));
    gquiz1.insert(pair  (3, 60));
    gquiz1.insert(pair  (6, 50));
    gquiz1.insert(pair  (6, 10));
 
    // printing multimap gquiz1
    multimap  :: iterator itr;
    cout << "\nThe multimap gquiz1 is : \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr)
    {
        cout << '\t' << itr->first
            << '\t' << itr->second << '\n';
    }
    cout << endl;
 
    //adding elements randomly,
    // to check the sorted keys property
    gquiz1.insert(pair  (4, 50));
    gquiz1.insert(pair  (5, 10));
     
    // printing multimap gquiz1 again
     
    cout << "\nThe multimap gquiz1 after adding extra elements is : \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr)
    {
        cout << '\t' << itr->first
            << '\t' << itr->second << '\n';
    }
    cout << endl;
 
 
 
    // assigning the elements from gquiz1 to gquiz2
    multimap  gquiz2(gquiz1.begin(),
                                gquiz1.end());
 
    // print all elements of the multimap gquiz2
    cout << "\nThe multimap gquiz2 after assign from gquiz1 is : \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
    {
        cout << '\t' << itr->first
            << '\t' << itr->second << '\n';
    }
    cout << endl;
 
    // remove all elements up to
    // element with value 30 in gquiz2
    cout << "\ngquiz2 after removal of elements less than key=3 : \n";
    cout << "\tKEY\tELEMENT\n";
    gquiz2.erase(gquiz2.begin(), gquiz2.find(3));
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
    {
        cout << '\t' << itr->first
            << '\t' << itr->second << '\n';
    }
 
    // remove all elements with key = 4
    int num;
    num = gquiz2.erase(4);
    cout << "\ngquiz2.erase(4) : ";
    cout << num << " removed \n" ;
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
    {
        cout << '\t' << itr->first
            << '\t' << itr->second << '\n';
    }
 
    cout << endl;
 
    //lower bound and upper bound for multimap gquiz1 key = 5
    cout << "gquiz1.lower_bound(5) : " << "\tKEY = ";
    cout << gquiz1.lower_bound(5)->first << '\t';
    cout << "\tELEMENT = " << gquiz1.lower_bound(5)->second << endl;
    cout << "gquiz1.upper_bound(5) : " << "\tKEY = ";
    cout << gquiz1.upper_bound(5)->first << '\t';
    cout << "\tELEMENT = " << gquiz1.upper_bound(5)->second << endl;
 
    return 0;
}


输出
The multimap gquiz1 is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    6    50
    6    10


The multimap gquiz1 after adding extra elements is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    50
    5    10
    6    50
    6    10


The multimap gquiz2 after assign from gquiz1 is : 
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    50
    5    10
    6    50
    6    10


gquiz2 after removal of elements less than key=3 : 
    KEY    ELEMENT
    3    60
    4    50
    5    10
    6    50
    6    10

gquiz2.erase(4) : 1 removed 
    KEY    ELEMENT
    3    60
    5    10
    6    50
    6    10

gquiz1.lower_bound(5) :     KEY = 5        ELEMENT = 10
gquiz1.upper_bound(5) :     KEY = 6        ELEMENT = 50

多图功能列表:

  • C++ STL中的multimap :: 运算符= –用于通过替换现有内容将新内容分配给容器。
  • C++ STL中的multimap :: crbegin()和multimap :: crend()– crbegin()返回一个常量反向迭代器,该迭代器引用了multimap容器中的最后一个元素。 crend()返回一个常数反向迭代器,该迭代器指向multimap中第一个元素之前的理论元素。
  • C++ STL中的multimap :: emplace_hint()–将键及其元素插入具有给定提示的multimap容器中。
  • C++ STL中的multimap clear()函数–从multimap中删除所有元素。
  • C++ STL中的multimap empty()函数–返回multimap是否为空。
  • C++ STL中的multimap maxsize()–返回多图容器可以容纳的最大元素数。
  • C++ STL中的multimap value_comp()函数–返回确定multimap中元素排序方式的对象(默认为'<‘)
  • C++ STL中的multimap rend –返回一个反向迭代器,该迭代器指向multimap容器的第一个元素之前的理论元素。
  • C++ STL中的multimap :: cbegin()和multimap :: cend()– cbegin()返回一个常量迭代器,该迭代器引用了multimap容器中的第一个元素。 cend()返回一个常数迭代器,该迭代器指向在multimap中最后一个元素之后的理论元素。
  • C++ STL中的multimap :: swap()–将一个多图的内容交换为另一个相同类型和大小的多图。
  • C++ STL中的multimap rbegin –返回指向容器最后一个元素的迭代器。
  • C++ STL中的multimap size()函数–返回multimap容器中的元素数。
  • C++ STL中的multimap :: emplace()–将键及其元素插入到multimap容器中。
  • C++ STL中的multimap :: begin()和multimap :: end()– begin()返回一个迭代器,该迭代器引用了multimap容器中的第一个元素。 end()返回迭代器,该迭代器返回到multimap中最后一个元素之后的理论元素。
  • C++ STL中的multimap upper_bound()函数–将迭代器返回到等效于键值为’g’的多重映射值的第一个元素,或者肯定会在multimap中的键值为’g’的元素之后。
  • C++ STL中的multimap :: count()–返回与multimap中键值为’g’的元素匹配的次数。
  • C++ STL中的multimap :: erase()–从多重映射中删除键值。
  • C++ STL中的multimap :: find()–如果找到了迭代器,则返回迭代器,该迭代器在multimap中具有键值“ g”,否则返回迭代器结束。
  • C++ STL中的multimap equal_range()–返回对的迭代器。该对是指范围的边界,该范围包括容器中所有具有等于k的键的元素。
  • C++ STL中的multimap insert()–用于在multimap容器中插入元素。
  • C++ STL中的multimap lower_bound()函数–将迭代器返回到等效于键值为’g’的多重映射值的第一个元素,或者绝对不会在多重映射中的键值为’g’的元素之前。
  • C++ STL中的multimap key_comp()–返回一个对象,该对象确定如何对multimap中的元素进行排序(默认为'<‘)。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”