117.info
人生若只如初见

C++ unordered_map遍历时如何删除元素

在C++中,当遍历unordered_map并删除元素时,我们需要注意一些事项。因为在遍历过程中删除元素可能会导致迭代器失效,所以我们不能直接在循环中删除元素。以下是一种可行的方法:

  1. 遍历unordered_map并将需要删除的键值对放入一个临时的容器中,而不是直接删除它们。
  2. 遍历结束后,再根据临时容器中的键值对来删除元素。

以下是一个示例代码:

#include 
#include 
#include 

int main() {
    std::unordered_map myMap = {
        {1, "apple"},
        {2, "banana"},
        {3, "cherry"}
    };

    std::vector keysToDelete;

    for (auto it = myMap.begin(); it != myMap.end(); ++it) {
        if (it->first % 2 == 0) {
            keysToDelete.push_back(it->first);
        }
    }

    for (int key : keysToDelete) {
        myMap.erase(key);
    }

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

    return 0;
}

在上面的示例中,我们遍历unordered_map,将所有偶数键值对的键存入keysToDelete容器中,然后再根据这些键删除元素。这样可以避免迭代器失效的问题。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe217AzsIAABRB1U.html

推荐文章

  • C# ILogger能否实现跨平台日志

    是的,C# ILogger可以实现跨平台日志。ILogger是一个抽象接口,通过对ILogger的实现,可以将日志输出到不同的目标,比如控制台、文件、数据库等。在不同平台上,...

  • 如何自定义C#中的ILogger实现

    要自定义C#中的ILogger实现,可以按照以下步骤进行: 创建一个新的类,实现ILogger接口。ILogger接口定义了日志记录的方法,包括LogInformation、LogWarning、Lo...

  • C# ILogger与传统日志的区别

    ILogger 是 .NET Core 中的日志记录接口,与传统的日志记录方式相比有以下几点区别: 抽象性:ILogger 是一个抽象接口,可以通过依赖注入来替换具体的日志记录实...

  • 为什么C#开发中需要ILogger

    C#开发中需要ILogger主要是为了记录应用程序的运行信息和错误日志,以帮助开发人员更好地跟踪和调试代码。ILogger可以在应用程序中方便地记录不同级别的日志信息...

  • 如何高效地遍历C++ unordered_map

    在遍历C++ unordered_map时,可以使用迭代器来实现高效遍历。以下是一种常用的方法:
    #include #include int main() { std::unordered_map myMap = {{1, "o...

  • C++ gettickcount在多核处理器上表现如何

    在多核处理器上,GetTickCount函数的表现可能会受到影响。因为GetTickCount函数是基于系统时钟的,而系统时钟可能会受到多核处理器的影响。在多核处理器上,不同...

  • 如何通过C++ gettickcount实现延时

    在C++中,可以通过调用GetTickCount()函数来获取当前系统时间的毫秒数,然后通过计算时间差来实现延时。下面是一个示例代码:
    #include void Delay(int mil...

  • C++ gettickcount能否用于性能测试

    可以用于性能测试,但不是最佳选择。GetTickCount函数返回从系统启动开始经过的毫秒数,可以用于计算程序运行时间或者比较不同程序的性能。然而,GetTickCount函...