我正在尝试使用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);
但是只是想知道为什么,然后保存一行代码。
答案 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)
中一样。