当前位置:首页 C++ > 正文

C++STL常用关联式关联容器(set/multiset , map/multimap)

作者:野牛程序员:2023-12-28 11:05:17 C++阅读 2563

关联式关联容器是C++标准模板库(STL)中的重要组成部分,包括setmultisetmapmultimap。以下是它们的简要介绍:

  1. set

    • set 是一个有序集合,其中每个元素都是唯一的。

    • 它基于红黑树实现,因此插入、删除和查找的平均时间复杂度为 O(log n)。

  2. multiset

    • multiset 也是有序集合,但允许元素重复。

    • 同样基于红黑树,插入、删除和查找的平均时间复杂度为 O(log n)。

  3. map

    • map 是一个键-值对的关联容器,每个键都是唯一的。

    • 基于红黑树实现,平均时间复杂度为 O(log n)。

  4. multimap

    • multimapmap 类似,但允许多个元素具有相同的键。

这些容器提供了一组丰富的方法来操作和管理数据。可以使用迭代器进行遍历,也可以使用成员函数进行插入、删除和查找操作。这些容器都提供了高效的查找操作,适用于大量数据的情况。

值得注意的是,关联容器的元素是按照其键值的大小进行排序的,这使得在有序数据集合中进行高效的查找和操作成为可能。

#include <iostream>
#include <set>
#include <map>

int main() {
    // set
    std::set<int> mySet;
    mySet.insert(30);
    mySet.insert(10);
    mySet.insert(40);
    mySet.insert(20);

    // multiset
    std::multiset<int> myMultiSet;
    myMultiSet.insert(30);
    myMultiSet.insert(10);
    myMultiSet.insert(40);
    myMultiSet.insert(20);
    myMultiSet.insert(30); // allows duplicate elements

    // map
    std::map<int, std::string> myMap;
    myMap[1] = "One";
    myMap[2] = "Two";
    myMap[3] = "Three";
    myMap[4] = "Four";

    // multimap
    std::multimap<int, std::string> myMultiMap;
    myMultiMap.insert(std::make_pair(1, "One"));
    myMultiMap.insert(std::make_pair(2, "Two"));
    myMultiMap.insert(std::make_pair(1, "Uno")); // allows multiple entries with the same key

    // Accessing elements
    std::cout << "Set elements: ";
    for (const auto &elem : mySet) {
        std::cout << elem << " ";
    }
    std::cout << "\\n";

    std::cout << "Multiset elements: ";
    for (const auto &elem : myMultiSet) {
        std::cout << elem << " ";
    }
    std::cout << "\\n";

    std::cout << "Map elements: ";
    for (const auto &pair : myMap) {
        std::cout << pair.first << "->" << pair.second << " ";
    }
    std::cout << "\\n";

    std::cout << "Multimap elements: ";
    for (const auto &pair : myMultiMap) {
        std::cout << pair.first << "->" << pair.second << " ";
    }
    std::cout << "\\n";

    return 0;
}


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击