Почему векторный конструктор принимает только последнее значение параметра при использовании в 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) вместо.

Другие вопросы по тегам