C++标准模板库(STL)中的Multimap

C++标准模板库(STL)中的Multimap

Multimap与map相似,不同之处在于多个元素可以具有相同的键。此外,在这种情况下,键值对和映射值对不一定是唯一的。有关multimap的一个重要事项是,multimap始终保持所有键的排序顺序。multimap的这些属性使其在竞争编程中非常有用。

与multimap相关的一些基本函数:

  • begin() – 返回multimap中第一个元素的迭代器
  • end() – 返回满足最后一个元素的理论要求的迭代器
  • size() – 返回multimap中的元素数
  • max_size() – 返回multimap可以容纳的最大元素数
  • empty() – 返回multimap是否为空
  • pair<int,int> insert(keyvalue, multimapvalue) – 将一个新元素添加到multimap中

C ++实现以说明上述函数:

// CPP程序演示multimap的实现
#include <iostream>
#include <iterator>
#include <map>
using namespace std;
 
// 驱动程序
int main()
{
    multimap<int, int> gquiz1; // 空multimap容器
 
    // 以随机顺序插入元素
    gquiz1.insert(pair<int, int>(1, 40));
    gquiz1.insert(pair<int, int>(2, 30));
    gquiz1.insert(pair<int, int>(3, 60));
    gquiz1.insert(pair<int, int>(6, 50));
    gquiz1.insert(pair<int, int>(6, 10));
 
    // 打印multimap gquiz1
    multimap<int, int>::iterator itr;
    cout << "\n multimap gquiz1是:\n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
    cout << endl;
 
    // 随机添加元素,
    // 检查排序键属性
    gquiz1.insert(pair<int, int>(4, 50));
    gquiz1.insert(pair<int, int>(5, 10));
 
    // 再次打印multimap gquiz1
 
    cout << "\n添加额外元素后的multimap gquiz1是:\n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
    cout << endl;
 
    // 将gquiz1的元素赋给gquiz2
    multimap<int, int> gquiz2(gquiz1.begin(), gquiz1.end());
 
    // 打印multimap gquiz2的所有元素
    cout << "\n赋值自gquiz1之后的multimap gquiz2为:\n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
    cout << endl;
 
    // 删除gquiz2中小于
    // 键值为3的所有元素
    cout << "\n gquiz2中小于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';
    }
 
    // 删除所有键值为4的元素
    int num;
    num = gquiz2.erase(4);
    cout << "\n gquiz2.erase(4) : ";
    cout << num << " 已删除 \n";
    cout << "\tKEY\tELEMENT\n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << '\t' << itr->first << '\t' << itr->second
             << '\n';
    }
 
    cout << endl;
 
    // multimap gquiz1中键=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;
}  

输出

multimap gquiz1是:
    KEY    ELEMENT
    1    40
    2    30
    3    60
    6    50
    6    10

在添加额外元素后,multimap gquiz1变为:
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    50
    5    10
    6    50
    6    10

从gquiz1分配到gquiz2后,multimap gquiz2变为:
    KEY    ELEMENT
    1    40
    2    30
    3    60
    4    50
    5    10
    6    50
    6    10

删除键值小于3的元素后,gquiz2变成:
    KEY    ELEMENT
    3    60
    4    50
    5    10
    6    50
    6    10

gquiz2.erase(4):删除1个,结果如下:
    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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程