gpt4 book ai didi

c++ - unordered_map的默认构造函数,bool类型会被设置为false?

转载 作者:太空宇宙 更新时间:2023-11-04 14:43:57 25 4
gpt4 key购买 nike

我对 unordered_map 的默认构造函数有一些疑问。

代码如下:

unordered_map<int, bool> m;

cout <<boolalpha << m[0] << endl;

输出是真还是假?

我知道该元素是使用其默认构造函数构造的,但映射值是真还是假?这是未定义的行为吗?

在 vs2013 中,输出为 false

实际上,我想删除数组中的重复元素。我想这样解决问题:

int a[] = {1, 2, 3, 1, 2, 3, 4};

unordered_map<int, bool> m;
int j = 0;

for (int i = 0; i < 7; ++i)

{
if (!m[a[i]])
{
a[j++] = a[i];
m[a[i]] = true;
}
}

谢谢,非常感谢您的回答。

最佳答案

std::mapstd::unordered_map

operator [] 插入一个 value-initialized 元素如果 key 不存在(§23.4.4.3 [map.access]/p1,§23.5.4.3 [unord.map.elem]/p2;§8.5 [dcl.init]/p17)。对于非类、非数组类型,值初始化 意味着零初始化(§8.5 [dcl.init]/p8)。因此,您示例中的 bool 保证为 false

一种(IMO 清洁器)方法来完成您正在尝试做的事情是使用 std::set(或 std::unordered_set):

int a[] = {1, 2, 3, 1, 2, 3, 4};

std::set<int> s(std::begin(a), std::end(a));
std::copy(s.begin(), s.end(), a);

std::copy 调用之后,a 的第一个 s.size() 元素是非重复元素。 Demo .

或者更简洁的方式(向@Praetorian 致敬):

int a[] = {1, 2, 3, 1, 2, 3, 4};

std::sort(std::begin(a), std::end(a));
int * last = std::unique(std::begin(a), std::end(a));
int dedup_size = last - a;

a 的第一个 dedup_size 元素是非重复元素。 Demo .

关于c++ - unordered_map的默认构造函数,bool类型会被设置为false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com