📜  删除std :: map中的元素的不同方法(erase()和clear())(1)

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

删除std::map中的元素的不同方法(erase()和clear())

std::map是C++ STL容器之一,它提供了键值对映射的功能,并且可以按照键的顺序排序。有时候我们需要从std::map中删除元素,本文将介绍两种常用的删除方法:erase()clear()

erase()方法

erase()方法可以通过键名或者指向某个元素的迭代器来删除元素。以下是使用erase()方法删除元素的示例代码:

#include <iostream>
#include <map>

int main()
{
    std::map<std::string, int> map = {
        {"apple", 2},
        {"banana", 3},
        {"orange", 4},
    };

    // 使用键名删除元素
    map.erase("banana");

    // 使用迭代器删除元素
    auto it = map.find("orange");
    if (it != map.end()) {
        map.erase(it);
    }

    // 打印map元素
    for (const auto& kv : map) {
        std::cout << kv.first << ": " << kv.second << std::endl;
    }

    return 0;
}

以上代码中,我们首先创建了一个std::map对象map,然后使用erase()方法分别删除了键名为"banana"和"orange"的元素。在删除"orange"元素之前,我们还使用find()方法找到了对应的迭代器。最后,我们遍历了map的所有元素,并将其打印到控制台上。

值得注意的是,如果我们使用非法的键名或者不存在的迭代器来调用erase()方法,程序会出现未定义的行为。为了避免这种情况,我们应该在调用erase()方法之前判断键名或迭代器是否存在于map中。

clear()方法

clear()方法可以一次性删除std::map中的所有元素,使其成为空map。以下是使用clear()方法删除元素的示例代码:

#include <iostream>
#include <map>

int main()
{
    std::map<std::string, int> map = {
        {"apple", 2},
        {"banana", 3},
        {"orange", 4},
    };

    // 使用clear()方法删除所有元素
    map.clear();

    // 打印map元素
    for (const auto& kv : map) {
        std::cout << kv.first << ": " << kv.second << std::endl;
    }

    return 0;
}

以上代码中,我们创建了一个和上一个例子一样的std::map对象map,然后调用了clear()方法以删除所有元素。在clear()方法被调用之后,map变成了一个空map,已经不存在任何元素了。

总结

两种删除std::map中元素的方法各有不同。erase()方法需要指定要删除元素的键名或者迭代器,适合单独删除某个元素。而clear()方法会一次性删除所有元素,适合删除整个map。使用这两个方法时,记得要注意数据的完整性和正确性,避免出现未定义的行为。