gpt4 book ai didi

c++ - 如何在 Qt 6 中将 QList 转换为 QSet

转载 作者:行者123 更新时间:2023-12-04 08:08:06 36 4
gpt4 key购买 nike

我正在将我的应用程序移植到 Qt 6,当我阅读文档时,我看到类被清理了很多,QListQVector统一,QStringList现在是 QList<QString> 的别名等等。
但是现在这给了我一个问题。
在我的代码(即 Qt 5)中,我正在转换 QStringListQSet从列表中消除重复项。我浏览了新文档,但我还没有看到转换的方法 QListQSet在 Qt 6 中。
那么如何转换QListQSet ?或者这是不可能的,我需要编写一个帮助函数来删除重复项?
编辑:我正在使用 Qt 6.0.1。

最佳答案

我必须承认我仍在使用 Qt5。
然而,QListQSet强烈提醒我std::liststd::set .
对于后者,已经有另一种(更灵活)的方法来实现这些目标:
使用带迭代器的构造。 Qt6 文档中的简短检查。说服了我,这也应该适用于 Qt 类:
QSet::QSet(InputIterator first, InputIterator last)

Constructs a set with the contents in the iterator range [first, last).

The value type of InputIterator must be convertible to T.

Note: If the range [first, last) contains duplicate elements, the first one is retained.

This function was introduced in Qt 5.14.


哪里 first设置为
QList::iterator QList::begin()

Returns an STL-style iterator pointing to the first item in the list.


last
QList::iterator QList::end()

Returns an STL-style iterator pointing to the imaginary item after the last item in the list.


放在一起时应该是什么样子:
QList<QString> aList;
// populate list
QSet<QString> aSet(aList.begin(), aList.end());

OP 指出 Qt-5 文档。已经包含有关此的提示:
QSet QList::toSet() const

Note: Since Qt 5.14, range constructors are available for Qt's generic container classes and should be used in place of this method.


OP 还提到了一个方便的包装器:
template <typename T>
QSet<T> QListToQSet(const QList<T>& qlist)
{
return QSet<T> (qlist.constBegin(), qlist.constEnd());
}
应用于上述样本:
QList<QString> aList;
// populate list
QSet<QString> aSet = QListToQSet(aList);
更通用的转换工具可能是这样的:
template <typename T, template<typename> typename C>
QSet<T> toQSet(const C<T> &container)
{
return QSet<T>(container.begin(), container.end());
}
即使匹配 std 也能工作容器也是:
std::vector<QString> aVec = { "Hello", "World", "Hello" };
QSet<QString> aSet = toSet(aVec);

关于c++ - 如何在 Qt 6 中将 QList 转换为 QSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66123242/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com