为什么在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个INT数。我在其他参数值中进行了更多的播放,并且意识到EMPLECE仅在矢量参数中获得了最后值。为什么?

我仍然可以通过做

来实现目标
vector<int> v(2,9);
amap.emplace('k',v);

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

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

这里的(2,9)只是逗号分隔的值。,之前的所有内容都被忽略了。所以就像

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

gcc甚至发出警告

警告:表达结果未使用[-wunused-value]

您可以使用以下

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

表达式 (2,9)正在使用内置逗号运算符,其结果为 9

您需要提供适当的std::vector对象,例如std::vector<int>(2, 9)中的对象。

最新更新