gpt4 book ai didi

QT容器,指定顺序,不重复

转载 作者:行者123 更新时间:2023-12-05 04:11:58 29 4
gpt4 key购买 nike

我需要类似于 QSet 的东西,但我需要这些项目按照我插入它们的顺序保存

有这样的东西吗?

最佳答案

我在 Qt 和 STL 中都不知道有什么开箱即用的东西。我认为 Boost 有类似的东西,但你自己做起来并不难。

你可以像这样围绕 QHash 做一个包装器:

template<typename T>
class MySet : QHash<T, int>
{
public:
using QHash<T, int>::QHash;

QVector<T> values() //this 'hides' the base QHash::values() of QHash
{
QVector<T> vec(count());

for(auto it = cbegin(); it != end(); ++it)
{
vec[it.value()] = it.key();
}

return vec;
}

void insert(const T &value)
{
if(!contains(value))
{
insert(value, m_Data.count());
}
}
};

用法与QSet非常相似:

MySet<QString> set;
set.insert("1");
set.insert("2");
set.insert("3");
qDebug() << set.values();

然后按顺序打印值。如果您需要更多的 complete 支持,例如迭代器也以您想要的顺序迭代,您将不得不重新实现更多功能,但其要点是相同的。毕竟 QSet 在内部也是 QHash。注意,上面不支持不修改就删除。

关于QT容器,指定顺序,不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531286/

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