Инициализация const QHash путем присоединения к существующему QHash

В моем проекте мне нужно несколько постоянных хэш-контейнеров, которые определены вне классов и функций и поэтому являются глобальными. При этом некоторые из этих контейнеров должны перекрываться. Со списками я бы сделал следующее, чтобы объединить второй список const с первым списком const:

const QList<QString> data1({
     "one",
     "two",
     "three"
 });

const QList<QString> data2 =
     data1 + 
     QList<QString>({
        "four",
        "five"
     });

Но это не работает с QHashes, так как для них нет оператора +. Вместо этого у них есть функция-член unite, но я не могу ее использовать, так как контейнеры const. Итак, я хочу что-то вроде этого:

const QHash<QString,int> hash1{
    {"one", 1},
    {"two", 2},
    {"three", 3}
};

const QHash<QString,int> hash2 = 
    hash1 +
    QHash<QString,int>({
    {"four", 4},
    {"five", 5}
});

or

const QHash<QString,int> hash2({
    {"four", 4},
    {"five", 5}
}).unite(hash1);

person Maximko    schedule 23.05.2018    source источник


Ответы (1)


const QHash<QString,int> hash2 = QHash<QString,int>{
    {"four", 4},
    {"five", 5}
}.unite(hash1);

Немного короче

const auto hash2 = QHash<QString,int>{
    {"four", 4},
    {"five", 5}
}.unite(hash1);

Если вы помните, как расширяется operator+, то вы поймете, что вызов unite и вызов operator+ грамматически одинаковы.

const QList<QString> data2 =
     data1.operator+(
     QList<QString>({
        "four",
        "five"
     }));
person S.M.    schedule 23.05.2018