📜  C++ STL 中的集合映射及示例(1)

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

C++ STL 中的集合、映射及示例

简介

C++ STL(Standard Template Library)是C++的一个重要组成部分,它提供了丰富的容器、算法、迭代器等工具,封装了常见的数据结构和算法,可以让开发者更轻松地开发高效、可读性强的代码。

在STL中,集合(Set)和映射(Map)是两种常见的数据结构,类似于数学中的集合和映射。集合中不允许重复元素,而映射则是一种键-值对的数据结构。

集合

集合(Set)是STL中的一个容器,其中的元素不能重复。STL的集合基于红黑树实现,因此集合中的元素总是有序的。

定义和初始化

可以使用以下语法定义一个集合:

#include <set>

std::set<int> mySet;

这定义了一个空的整数集合。

也可以在定义时初始化集合,例如:

std::set<int> mySet = {1, 2, 3};

这样就定义了一个包含元素1、2、3的整数集合。

插入元素

可以使用以下方法向集合中插入元素:

mySet.insert(1);
mySet.insert(2);
mySet.insert(3);

这样就向集合中插入了元素1、2、3。

插入元素时,如果集合中已经有相同的元素,则插入操作会被忽略。

访问元素

可以使用以下方法访问集合中的元素:

std::set<int>::iterator it;
for (it = mySet.begin(); it != mySet.end(); it++) {
    std::cout << *it << " ";
} 

这样就可以输出集合中的所有元素。

查找元素

可以使用以下方法查找集合中的元素:

if (mySet.find(1) != mySet.end()) {
    std::cout << "Found!" << std::endl;
}

这样就可以查找集合中是否包含元素1。

删除元素

可以使用以下方法从集合中删除元素:

mySet.erase(1);

这样就从集合中删除了元素1。

示例

下面是一个使用STL集合的示例程序,它输入一些整数,并输出去重后的整数列表。

#include <iostream>
#include <set>

int main() {
    int n, x;
    std::set<int> mySet;
    std::cin >> n;
    for (int i = 0; i < n; i++) {
        std::cin >> x;
        mySet.insert(x);
    }
    std::set<int>::iterator it;
    for (it = mySet.begin(); it != mySet.end(); it++) {
        std::cout << *it << " ";
    }
    return 0;
}
映射

映射(Map)是STL中的一个容器,存储的是键-值对。STL的映射也是基于红黑树实现的,因此所有的键都是有序的。

定义和初始化

可以使用以下语法定义一个映射:

#include <map>

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

这定义了一个空的字符串到整数的映射。

也可以在定义时初始化映射,例如:

std::map<std::string, int> myMap = {{"apple", 1}, {"banana", 2}, {"pear", 3}};

这样就定义了一个包含三个键值对的字符串到整数的映射。

插入元素

可以使用以下方法向映射中插入元素:

myMap.insert(std::make_pair("orange", 4));

这样就向映射中插入了一个键值对,键是"orange",值是4。

插入键值对时,如果映射中已经有相同的键,则插入操作会覆盖原有的值。

访问元素

可以使用以下方法访问映射中的元素:

std::cout << myMap["apple"] << std::endl;

这样就可以输出键"apple"对应的值。

查找元素

可以使用以下方法查找映射中的元素:

if (myMap.count("apple") > 0) {
    std::cout << "Found!" << std::endl;
}

这样就可以查找映射中是否包含键"apple"。

删除元素

可以使用以下方法从映射中删除元素:

myMap.erase("apple");

这样就从映射中删除了键"apple"和对应的值。

示例

下面是一个使用STL映射的示例程序,它输入一些字符串和整数,并输出对应的键值对列表。

#include <iostream>
#include <map>

int main() {
    int n, x;
    std::string s;
    std::map<std::string, int> myMap;
    std::cin >> n;
    for (int i = 0; i < n; i++) {
        std::cin >> s >> x;
        myMap[s] = x;
    }
    std::map<std::string, int>::iterator it;
    for (it = myMap.begin(); it != myMap.end(); it++) {
        std::cout << it->first << " " << it->second << std::endl;
    }
    return 0;
}
总结

STL的集合和映射是两种常用的数据结构,它们可以帮助我们快速地去重、查找数据,并且保持数据有序。使用STL容器可以使代码更紧凑、可读性更强,值得学习和掌握。