为什么map <bool,int> m = {{1,2},{3,4},{5,0}};大小1而不是3?</bool,int>

时间:2015-02-19 00:52:48

标签: c++ c++11 stdmap uniform-initialization

非常奇怪:

map<bool,int> mb={{1,2},{3,4},{5,0}};
cout << mb.size(); 
map<int,int> mi={{1,2},{3,4},{5,0}};
cout << mi.size();

打印出来

  

13

3 个答案:

答案 0 :(得分:18)

std::map是唯一键。转换为1时,35true都会产生bool

答案 1 :(得分:7)

只是一个猜测,但您的第一张地图的密钥类型为bool,所有值1, 3 and 5的评估结果为真。

您只需重写相同的条目。

答案 2 :(得分:6)

你的第一张地图以bool为关键。 bool只有两个值。您提供整数作为输入。非0英寸为真,0英寸为假。因此,所有的钥匙都是正确的。其中两个被最后一个覆盖。这就是尺寸为1的原因。