C++ 如何清空unordered_map

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 如何清空unordered_map相关的知识,希望对你有一定的参考价值。

如题,在C++中,怎么把unordered_map容器内的数据全部清空?

unordered_map::clear()

标准容器的清空方法应该都是一样的。

参考技术A unordered_map().swap(your_map);

参考技术B erase擦除单个元素
clear清空映射
详见

http://www.cplusplus.com/reference/unordered_map/unordered_map/

如何在 C++ 中使用 unordered_maps 的 unordered_map?

【中文标题】如何在 C++ 中使用 unordered_maps 的 unordered_map?【英文标题】:How to use unordered_map of unordered_maps in c++? 【发布时间】:2018-06-01 15:59:48 【问题描述】:

我有以下数据结构问题?你能帮帮我吗? 所以我的要求是在我将新数据项添加到此映射中时将此数据结构初始化为默认值。

我怎样才能有效地做到这一点?

对于我要添加的每个条目,我需要将 a1、a2、a3 设置为零。

struct a 
 int a1;
 int a2;
 int a3;
;

struct A 
 struct a A1;
 struct a A2;
;

unordered_map<int, unordered_map<int, struct A>> big_map;

尝试运行以下代码。

    unordered_map<int, struct A> inner_map;
    big_map[0] = inner_map;
    struct A m;
    big_map[0][0] = m;
    cout << "Values: " << big_map[0][0].A1.a1 << ", " << big_map[0][0].A1.a2 << ", " << big_map[0][0].A1.a3 << endl;

输出:

g++ -std=c++11 -o exe b.cc 。/可执行程序 值:0、0、1518395376 。/可执行程序 值:0、0、-210403408 。/可执行程序 值:0、0、-1537331360 。/可执行程序 值:0、0、-915603664

所以没有为 a3 进行默认初始化?

【问题讨论】:

@SombreroChicken 不需要,在 c++11 插入映射后会导致默认初始化,即使类型没有构造函数,例如整数、浮点数等。 @KostasRim 这是通用的答案,不包括 C++11。但话说回来unordered_map 只是 C++11,所以你是对的。 【参考方案1】:

从 C++11 开始,您可以这样做:

struct a 
 int a1 = 0;
 int a2 = 0;
 int a3 = 0;
;

【讨论】:

【参考方案2】:

您可以为结构添加默认构造函数:

struct a 
    a() : a1(0), a2(0), a3(0)  
    ...
;

struct A 
    A() : A1(), A2()  
    ...
;

然后当你添加一个新结构时,你可以这样做:

big_map[5][7] = A();

【讨论】:

我不明白为什么 A1() ?,A1 是可变的 @jpb123 A1 是一个结构对象。初始化列表中的A1() 显式调用其默认构造函数将a1, a2, a3 设置为0。 @jpb123 你的意思是在 A 的构造函数的初始化列表中吗?它默认初始化 A1 成员变量。 @scohe001,非常感谢。我不知道这一点。它有效。 @SeanBurton,A1(some_another_struct_a_variable) 使用 some_another_struct_a_variable 初始化 A1,A1() 使用默认构造函数初始化 A1。 .我说的对吗?【参考方案3】:

你可以像类一样将构造函数赋予结构,并将其初始化为0

struct a

   int a1;
   int a2;
   int a3;
   a() : a1(0), a2(0), a3(0)
   
   

【讨论】:

以上是关于C++ 如何清空unordered_map的主要内容,如果未能解决你的问题,请参考以下文章

C++ map 如何清空 内存泄露

C++ map 如何清空 内存泄露

c++ map clear相关内存会清空吗?

c++ map clear相关内存会清空吗

c++ map clear相关内存会清空吗?

如何在Arduino c语言中清空字符串