在我的项目中,我需要几个常量散列容器,它们在类和函数之外定义,因此是全局的。这样,其中一些容器应该重叠。对于列表,我将执行以下操作以将第二个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);

最佳答案

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"
     }));

关于c++ - 通过与现有QHash结合来初始化const QHash,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50493244/

10-16 10:39