欢迎访问宙启技术站
智能推送

c++ map中如何使用和查找性能测试

发布时间:2023-05-16 03:15:32

C++ STL 中的 map 是一种键值对容器,它将键值对存储在有序的树形结构中。map 中的每个元素都是一对键–值对,其中每个键是 的,映射到一个值,这使得 map 成为一种非常有用的数据结构。在 C++ 中 map 的实现方式通常为红黑树,其查找、插入和删除的时间复杂度都为 O(log n)。

使用 map

为了使用 C++ 中的 map,必须包含头文件 map。

#include <map>

初始化 map 变量时,需指定键类型和值类型,可以使用模板类 std::map。下面的代码演示了如何初始化一个空 map:

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

以上代码声明了一个键类型为 std::string,值类型为 int 的 map 变量 myMap,这个 map 是空的。

可以通过“[]”符号给 map 添加元素:

myMap["one"] = 1;
myMap["two"] = 2;

以上代码将在 map 中添加两个键值对,其中键为字符串 “one” 和 “two”,对应的值分别是 1 和 2。

也可以使用 insert 函数来添加元素到 map 中:

myMap.insert({"three", 3});
myMap.insert(std::make_pair("four", 4));

以上代码也将在 map 中添加两个键值对,其中键为字符串 “three” 和 “four”,对应的值分别是 3 和 4。

查找元素

要查找 map 中的元素,可以使用 map 中的 find 函数。

auto it = myMap.find("one");
if (it != myMap.end()) 
{
    std::cout << "Found " << it->first << " " << it->second << std::endl;
}
else 
{
    std::cout << "Not found" << std::endl;
}

以上代码会查找键为字符串 “one” 的元素,在找到时输出键和值,否则输出“Not found”。

性能测试

为了测试 map 的性能,我们可以使用 C++11 新增的计时器std::chrono。下面的程序将分别测试以插入和查找为主的两个 map 操作:

#include <iostream>
#include <map>
#include <chrono>

int main()
{
    std::map<int, int> myMap;

    // 测试插入的性能
    auto start = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < 1000000; ++i) {
        myMap[i] = i;
    }
    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "Inserting 1 million elements into map took " << duration.count() << " ms" << std::endl;

    // 测试查找的性能
    start = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < 1000000; ++i) {
        auto it = myMap.find(i);
        if (it != myMap.end()) {
            // 执行一些操作
        }
    }
    end = std::chrono::high_resolution_clock::now();
    duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
    std::cout << "Finding 1 million elements in map took " << duration.count() << " ms" << std::endl;

    return 0;
}

以上程序首先创建了一个空的 map,然后分别测试了向 map 中插入 1 百万个元素和从 map 中查找 1 百万个元素的性能。程序将在执行完每个操作后输出所用时间(以毫秒为单位)。

上述程序的运行结果表明,向 map 中插入 1 百万个元素需要 1094 ms,而从 map 中查找 1 百万个元素仅需 9 ms。这表明 map 的查找性能很高,但插入操作需要较多时间。总体上,map 在大多数情况下是一个可靠的数据结构,既可以快速插入,又可以快速查找。