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

но просто интересно, почему, и сохранить одну строку кода.


person Thomson12    schedule 21.12.2018    source источник


Ответы (2)


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

Здесь (2,9) — это просто значения, разделенные запятыми. Где все до , игнорируется. Так что это как

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

gcc даже выдает предупреждение

предупреждение: результат выражения не используется [-Wunused-value]

Вы можете использовать ниже

amap.emplace('k', vector<int>(2,9));
person Gaurav Sehgal    schedule 21.12.2018

Выражение (2,9) использует встроенный оператор запятой, и результат этого 9.

Вместо этого вам нужно предоставить правильный объект std::vector, как в std::vector<int>(2, 9).

person Some programmer dude    schedule 21.12.2018