📜  C++ STL中的向量映射与示例(1)

📅  最后修改于: 2023-12-03 15:13:56.980000             🧑  作者: Mango

C++ STL中的向量映射与示例

在 C++ STL(Standard Template Library)中,向量映射是一种非常有用的容器类型,它允许存储任意类型的值,并且可以通过下标的方式快速访问元素。

本文将介绍向量映射的基本概念及其使用方法,并给出一些示例代码。

向量映射的基本概念

向量映射通常也被称为“映射”,是一种将键和值进行映射的容器类型。其中,键指代一个唯一的标识符,而值则是与该键相关联的数据。

在 C++ STL 中,可以使用 std::map 类模板来实现向量映射。该模板定义在头文件 <map> 中。

#include <map>

std::map<int, std::string> myMap;

上面的代码定义了一个键类型为 int,值类型为 std::string 的向量映射。我们可以使用以下方式向映射中添加元素:

myMap[1] = "One";
myMap[2] = "Two";
myMap[3] = "Three";

其中,myMap[1] = "One" 等价于 myMap.insert(std::make_pair(1, "One")),也就是将键为 1,值为 "One" 的键值对添加到映射中。

我们可以使用以下方式遍历映射中的元素:

for (auto& kv : myMap) {
    std::cout << kv.first << ": " << kv.second << std::endl;
}

其中,auto& kv 表示遍历到的键值对,kv.first 表示键,kv.second 表示值。

示例代码

下面给出一些向量映射的示例代码,供大家参考。

查找字符串中出现次数最多的字符
#include <iostream>
#include <string>
#include <map>

char findMostFrequentChar(const std::string& str) {
    std::map<char, int> charCount;

    for (char c : str) {
        charCount[c]++;
    }

    char mostFreqChar = '\0';
    int maxCount = 0;

    for (auto& kv : charCount) {
        if (kv.second > maxCount) {
            mostFreqChar = kv.first;
            maxCount = kv.second;
        }
    }

    return mostFreqChar;
}

int main() {
    std::string str = "hello world";

    char mostFreqChar = findMostFrequentChar(str);

    std::cout << "The most frequent char is: " << mostFreqChar << std::endl;

    return 0;
}

上面的代码使用了一个向量映射 charCount,用于统计字符串中每个字符出现的次数。遍历完字符串后,再遍历一遍映射,找出出现次数最多的字符即可。

计算两个数组的交集
#include <iostream>
#include <vector>
#include <map>

std::vector<int> intersect(const std::vector<int>& nums1, const std::vector<int>& nums2) {
    std::map<int, int> numCount;
    std::vector<int> result;

    for (int num : nums1) {
        numCount[num]++;
    }

    for (int num : nums2) {
        if (numCount[num]) {
            result.push_back(num);
            numCount[num]--;
        }
    }

    return result;
}

int main() {
    std::vector<int> nums1 = {1, 2, 2, 1};
    std::vector<int> nums2 = {2, 2};

    std::vector<int> result = intersect(nums1, nums2);

    std::cout << "The intersection is: ";
    for (int num : result) {
        std::cout << num << ", ";
    }
    std::cout << std::endl;

    return 0;
}

上面的代码使用了两个向量映射 numCountresult,其中,numCount 记录了第一个数组中每个元素出现的次数,result 用于存储交集。遍历第二个数组时,如果当前元素在第一个数组中出现过,则将其加入交集中,并将该元素在第一个数组中出现过的次数减去 1。

总结

本文介绍了 C++ STL 中的向量映射,并给出了一些示例代码。向量映射是一种非常有用的容器类型,在编写复杂 C++ 程序时经常会用到。