Qt容器类的通用搜索算法

时间:2016-06-02 06:36:53

标签: c++ qt stl containers

STL使用各种函数来查找容器类中的元素。 Qt 5.5容器类中是否有类似的功能,例如QListQVector

特别是,我正在寻找使用Qt容器和Qt算法的等效单行,即std::find_if

int main(int arg, char** args) {
    std::vector<int> c = { 2,3,4,6,6,15 };
    if (std::find_if(c.begin(), c.end(), [](const int& value) { return value % 5 == 0; }) != c.end()) {
        std::cout << "At least one element divisible by 5." << std::endl;
    } else {
        std::cout << "No element is divisible by 5." << std::endl;
    }
    return 0;
}

可被5整除的元素的谓词应仅作为示例。

Qt Framework是否提供了这么好的算法?

2 个答案:

答案 0 :(得分:5)

algorithm标头中定义的STL算法可以与Qt容器一起使用。如果Qt缺少等效算法,则没有理由避免使用STL算法。如果Qt是使用STL支持构建的,它应该默认工作。

#include <algorithm> // std::find_if
#include <QApplication>
#include <QVector>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QVector<int> c{ 2,3,4,6,6,15 };
    if (std::find_if(c.begin(), c.end(), [](const int& value) { return value % 5 == 0; }) != c.end()) {
        ...
    }
    return app.exec();
}

答案 1 :(得分:1)

标准C ++算法适用于满足给定算法要求的任何容器。相关的标准容器在这里并不特别:它们碰巧满足要求。就像Qt容器一样,还有很多其他容器。无论如何,您应该在工作过程中编写自己的容器或迭代器适配器,特别是利用标准算法。

例如,您可以拥有QGraphicsSceneQLayout的迭代器适配器,或者必须创建an iterator for circular data structures