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

📅  最后修改于: 2023-12-03 14:39:54.404000             🧑  作者: Mango

C++ 中的多重映射

在 C++ 中,多重映射(multimap)是一种关联式容器,它可以存储按键排序的键值对。与映射(map)相比,多重映射允许多个元素具有相同的键。这使得多重映射适用于需要按键存储多个值的情况。下面是一个使用多重映射的示例:

示例
#include <iostream>
#include <map>

int main() {
    std::multimap<int, std::string> my_map;

    // 添加元素
    my_map.insert(std::make_pair(1, "apple"));
    my_map.insert(std::make_pair(2, "banana"));
    my_map.insert(std::make_pair(2, "orange"));

    // 遍历并输出所有的元素
    for (auto& elem : my_map) {
        std::cout << elem.second << " is a fruit with key " << elem.first << std::endl;
    }

    return 0;
}

在上面的示例中,我们创建了一个 int 类型到 std::string 类型的多重映射 my_map。我们使用 insert() 添加了三个元素,其中 (1, "apple")(2, "banana")(2, "orange"),它们的键分别为 122。可以注意到,2对应了两个不同的值,这是多重映射的特性。

接下来,我们用循环遍历并输出了所有的元素。由于元素的顺序是按照键进行排序的,所以输出的顺序是 1 => apple2 => banana2 => orange

多重映射的常见操作

以下是使用多重映射时可能会用到的常见操作:

插入元素

可以使用insert()emplace()操作来插入一个元素到多重映射中。插入的元素是一个键值对,其中键和值可以是任何类型。

std::multimap<int, std::string> my_map;

// 通过 insert() 插入元素
my_map.insert(std::make_pair(1, "apple"));

// 通过 emplace() 插入元素
my_map.emplace(2, "banana");
访问元素

使用find()操作来访问一个键所对应的元素。由于多重映射中可以存在多个键值相同的元素,因此返回值是一个指向元素范围的迭代器,而不是一个指向单个元素的迭代器。

std::multimap<int, std::string> my_map;

my_map.insert(std::make_pair(1, "apple"));
my_map.insert(std::make_pair(2, "banana"));
my_map.insert(std::make_pair(2, "orange"));

auto range = my_map.equal_range(2);
for (auto it = range.first; it != range.second; it++) {
    std::cout << it->second << std::endl;
}

上面的示例中,我们首先创建了一个多重映射 my_map,并添加了三个元素。然后使用 equal_range() 方法获得原键为 2 的元素范围,并遍历输出这个范围中的所有元素的值。

删除元素

可以使用erase()方法来删除一个键所对应的元素。在多重映射中,这会删除所有键值匹配的元素。

std::multimap<int, std::string> my_map;

my_map.insert(std::make_pair(1, "apple"));
my_map.insert(std::make_pair(2, "banana"));
my_map.insert(std::make_pair(2, "orange"));

my_map.erase(2);

上面的示例中,我们删除了原键为 2 的所有元素。

判断元素是否存在

可以使用find()方法来查看一个键值对是否存在。如果存在,返回一个指向这个键值对的迭代器;否则返回 end() 迭代器。

std::multimap<int, std::string> my_map;

my_map.insert(std::make_pair(1, "apple"));
my_map.insert(std::make_pair(2, "banana"));

if (my_map.find(1) != my_map.end()) {
    std::cout << "Element with key 1 exists." << std::endl;
}

上面的示例中,我们判断了原键为 1 的元素是否存在。由于存在,程序会输出一段文字。

结论

多重映射适用于需要按键存储多个元素的情况。C++ 中提供了一系列可以通过多重映射操作元素的方法,其中包括插入、访问、删除和查找等功能。