Bro*_*ley 0 c++ unordered-map c++11
我对unordered_map的默认构造函数有一些疑问.
这是代码:
unordered_map<int, bool> m;
cout <<boolalpha << m[0] << endl;
Run Code Online (Sandbox Code Playgroud)
输出是真还是假?
我知道元素是使用其默认构造函数构造的,但映射的值是true还是false?这是未定义的行为吗?
在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;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢,我真的很感激你的回答.
T.C*_*.C. 10
operator []的std::map和std::unordered_map插入一个值初始化元件如果键不存在(§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);
Run Code Online (Sandbox Code Playgroud)
在之后std::copy的来电,第一s.size()要素a是不可重复的元素.演示.
或者更清洁的方式(帽子提示@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;
Run Code Online (Sandbox Code Playgroud)
第一个dedup_size元素a是非重复元素.演示.
| 归档时间: |
|
| 查看次数: |
6533 次 |
| 最近记录: |