Почему векторный конструктор принимает только последнее значение параметра при использовании в empor unordered_map? - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь реализовать 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 ]

0 голосов
/ 21 декабря 2018
amap.emplace('k',(2,9));

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

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

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

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

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

amap.emplace('k', vector<int>(2,9));
0 голосов
/ 21 декабря 2018

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

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

...