Инициализация const QHash путем объединения с существующим QHash - PullRequest
0 голосов
/ 23 мая 2018

В моем проекте мне нужно несколько константных хеш-контейнеров, которые определены вне классов и функций и поэтому являются глобальными.При этом некоторые из этих контейнеров должны перекрываться.Со списками я бы сделал следующее, чтобы объединить второй 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}
});

или

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

1 Ответ

0 голосов
/ 23 мая 2018
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"
     }));
...