在unordered_map位置中使用向量构造器时,为什么只使用参数的最后一个值?

时间:2018-12-21 06:43:00

标签: c++ vector unordered-map emplace

我正在尝试使用unordered_map :: emplace

来实现unordered_map>
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

int main ()
{
    unordered_map<char,vector<int>>  amap;
    amap.emplace('k',(2,9));
    for(auto i : amap['k']){
    cout << i;
    }

}

我期望输出为“ 99”,因为我用(2,9)构造了向量。 但是实际结果是“ 000000000”,其中Emplace构造矢量为(9),0为默认值,9为整数数。我对其他参数值进行了更多操作,并意识到Emplace仅采用了矢量参数中的最后一个值。为什么呢?

我仍然可以通过

完成目标
vector<int> v(2,9);
amap.emplace('k',v);

但是只是想知道为什么,然后保存一行代码。

2 个答案:

答案 0 :(得分:4)

amap.emplace('k',(2,9));

此处(2,9)只是逗号分隔的值。 ,之前的所有内容都将被忽略。 就像

amap.emplace('k', (9));

gcc甚至会发出警告

  

警告:表达式结果未使用的[-Wunused-value]

您可以使用以下

amap.emplace('k', vector<int>(2,9));

答案 1 :(得分:1)

表达式(2,9)使用的是the built-in comma operator,其结果是9

您需要提供一个正确的std::vector对象,就像在std::vector<int>(2, 9)中一样。