Почему векторный конструктор принимает только последнее значение параметра при использовании в empor unordered_map?
Я пытаюсь реализовать unordered_map> с помощью unordered_map::emplace
#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 ответа
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)
вместо.