📜  C++ 中对的多重映射与示例

📅  最后修改于: 2022-05-13 01:54:48.673000             🧑  作者: Mango

C++ 中对的多重映射与示例

什么是多图?

在 C++ 中,multimap 是一个关联容器,用于以映射方式存储元素。在内部,multimap 被实现为红黑树。多重映射的每个元素都被视为一对。第一个值称为键,第二个值称为值。 Multimap 与 map 非常相似,但在 multimap 的情况下,我们可以有多个相同的键。此外,我们不能使用方括号 ([]) 来访问键映射的值。与地图一样,多地图的键默认按升序排序。

与多图相关的功能:

  • begin() 返回一个迭代器,指向多重映射中的第一个元素
  • end() 返回一个迭代器,指向多重映射中最后一个元素之后的理论元素
  • size() 返回多图中的元素数量
  • max_size() 返回多图可以容纳的最大元素数
  • empty() 返回多图是否为空
  • insert(key, value) 向多图添加一个新元素或对
  • erase(iterator position) 删除迭代器指向的位置的元素
  • erase(const x) 从多图中删除键值“x”
  • clear() 从多图中删除所有元素

什么是一对?

C++ 中的实用程序标头为我们提供了配对容器。一对由两个数据元素或对象组成。

  • 第一个元素被称为“第一”,第二个元素被称为“第二”,并且顺序是固定的(第一,第二)。
  • Pair 用于将类型可能不同的两个值组合在一起。 Pair 提供了一种将两个异构对象存储为一个单元的方法。
  • 可以分配、复制和比较对。在 map 或 hash_map 中分配的对象数组默认为“pair”类型,其中所有“first”元素都是与其“second”值对象关联的唯一键。

要访问元素,我们使用变量名后跟点运算符,然后是关键字 first 或 second。

如何访问一对?

可以使用点 (.)运算符访问对的元素。

句法:

对多图

对的多重映射是一个多重映射,其中键或值本身就是一对。如果对的对应的第一个和第二个元素相等,则认为两个对是相等的。现在,如果需要以排序或特定顺序存储一对以上的副本以及其他元素,在这种情况下,多组对就派上用场了。

句法:

示例 1:下面是 C++ 程序,用于演示对多映射的工作。

C++
// C++ program to demonstrate
// the working of a multimap of
// pairs.
#include 
using namespace std;
  
// Function to print multimap elements
void print(multimap, 
           bool>& myContainer)
{
    cout << "Key(pair of integers)" << 
            "            " << 
            "Value(boolean)\n\n";
  
    for (auto pr : myContainer)  
    {
        pair myPair = pr.first;
  
        // pr points to current pair of myContainer
        cout << '[' << myPair.first << " , " << 
                myPair.second << ']' << 
                "                                 " << 
                pr.second << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a multimap
    // Key is of pair type
    // Value is of bool type
    multimap, bool> myContainer;
  
    // Creating some pairs to be used
    // as keys
    pair pair1;
    pair1 = make_pair(100, 200);
  
    pair pair2;
    pair2 = make_pair(200, 300);
  
    pair pair3;
    pair3 = make_pair(300, 400);
  
    pair pair4;
    pair4 = make_pair(100, 200);
  
    // Since each element is a pair on 
    // its own in a multimap. So, we 
    // are inserting a pair
    // Note that [] operator doesn't working 
    // in case of a multimap
    myContainer.insert(pair, 
                       bool>(pair1, true));
    myContainer.insert(pair, 
                       bool>(pair2, false));
    myContainer.insert(pair, 
                       bool>(pair3, true));
    myContainer.insert(pair, 
                       bool>(pair4, false));
  
    // Calling print function
    print(myContainer);
  
    return 0;
}


C++
// C++ program to demonstrate
// the working of a multimap of
// pairs.
#include 
using namespace std;
  
// Function to print multimap elements
void print(multimap, 
           bool>& myContainer)
{
    cout << "Key(pair of integers)" << 
            "            " << 
            "Value(boolean)\n\n";
  
    for (auto pr : myContainer) 
    {
        pair myPair = pr.first;
  
        // pr points to current pair of myContainer
        cout << '[' << myPair.first << 
                " , " << myPair.second << 
                ']' << "                " << 
                "                 " << 
                pr.second << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a multimap
    // Key is of pair type
    // Value is of bool type
    multimap, bool> myContainer;
  
    // Creating some pairs to be used
    // as keys
    pair pair1;
    pair1 = make_pair("GFG", 100);
  
    pair pair2;
    pair2 = make_pair("C++", 200);
  
    pair pair3;
    pair3 = make_pair("CSS", 300);
  
    pair pair4;
    pair4 = make_pair("GFG", 400);
  
    // Since each element is a pair on its 
    // own in a multimap. So, we are 
    // inserting a pair
    // Note that [] operator doesn't working 
    // in case of a multimap
    myContainer.insert(pair, 
                       bool>(pair1, true));
    myContainer.insert(pair, 
                       bool>(pair2, false));
    myContainer.insert(pair, 
                       bool>(pair3, true));
    myContainer.insert(pair, 
                       bool>(pair4, false));
  
    // Calling print function
    print(myContainer);
  
    return 0;
}


输出

示例 2:下面是 C++ 程序,用于演示对多映射的工作。

C++

// C++ program to demonstrate
// the working of a multimap of
// pairs.
#include 
using namespace std;
  
// Function to print multimap elements
void print(multimap, 
           bool>& myContainer)
{
    cout << "Key(pair of integers)" << 
            "            " << 
            "Value(boolean)\n\n";
  
    for (auto pr : myContainer) 
    {
        pair myPair = pr.first;
  
        // pr points to current pair of myContainer
        cout << '[' << myPair.first << 
                " , " << myPair.second << 
                ']' << "                " << 
                "                 " << 
                pr.second << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a multimap
    // Key is of pair type
    // Value is of bool type
    multimap, bool> myContainer;
  
    // Creating some pairs to be used
    // as keys
    pair pair1;
    pair1 = make_pair("GFG", 100);
  
    pair pair2;
    pair2 = make_pair("C++", 200);
  
    pair pair3;
    pair3 = make_pair("CSS", 300);
  
    pair pair4;
    pair4 = make_pair("GFG", 400);
  
    // Since each element is a pair on its 
    // own in a multimap. So, we are 
    // inserting a pair
    // Note that [] operator doesn't working 
    // in case of a multimap
    myContainer.insert(pair, 
                       bool>(pair1, true));
    myContainer.insert(pair, 
                       bool>(pair2, false));
    myContainer.insert(pair, 
                       bool>(pair3, true));
    myContainer.insert(pair, 
                       bool>(pair4, false));
  
    // Calling print function
    print(myContainer);
  
    return 0;
}
输出