Qt:如何在大小写不敏感模式下减去QString的两个QSet
Qt: How to subtract two QSet of QString in case insensitivity mode
我正在使用Qt处理一个逻辑问题。我有两个qset的QString
QSet<QString> set1: [ "aaa", "BBB" ]
QSet<QString> set2: [ "aaa", "bbb", "ccc", "ddd" ]
我想用set2减去set1,所以我使用:
set2.subtract( set1 );
得到:
set2: ["bbb", "ccc", "ddd"]
但在这种情况下,"bbb"没有从set2中删除,尽管set1包含此记录。这是因为默认的QString::contains方法(它是QSet::subtract使用的方法)是区分大小写的。
还有另一个QString::contains方法,它接受一个参数来定义区分大小写模式,但我真的不知道如何使用它。
有没有人知道如何在QString的两个QSet之间进行不区分大小写的减法?
以下是我到目前为止所做的尝试:
将两个集合转换为大写 set2显示在一个列表中,所以如果所有项都是大写的(或者都是小写的),这不会很花哨。
扩展QSet类并重写subtract方法我试图用MyStringSet自定义类扩展这个类,但我对Qt不是很满意,这对我来说很复杂。
Qt容器类基本上与STL兼容。而std::set_difference允许指定比较器。当您只需要在某些情况下不区分大小写或不想在派生标准类型时弄乱时,这非常有用:
struct qstring_compare_i
{
bool operator()(const QString & x, const QString y) const
{ return QString::compare(x, y, Qt::CaseInsensitive) < 0; }
};
static QSet<QString> substract_sets(const QSet<QString> & qs1, const QSet<QString> & qs2)
{
std::set<QString> r;
std::set_difference(qs1.begin(), qs1.end(), qs2.begin(), qs2.end(), std::inserter(r, r.end()), qstring_compare_i());
QSet<QString> result;
for(std::set<QString>::iterator i=r.begin();i!=r.end();++i) {
result << *i;
}
return result;
}
最快的方法是像这样子类化QString并覆盖比较器,在下面的示例中,我已经完成了相等操作符:
class QStringInsensitive: public QString
{
bool operator==(const QString& other) const
{
return (0 == this->compare(other, Qt::CaseInsensitive));
}
};
QSet< QStringInsensitive > set;
相关文章:
- 将 Qvector<uint8_t> 转换为 QString
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 将 hh:mm:ss.zzz 时间 QString 转换为毫秒的单行函数?
- Qt C++ 如何在 1 个命令中砍掉属于 QStringList 成员的 QString 字母
- 为什么使用 QString::right 在字符串开头省略逗号?
- Qt:更新 QString 时自动生成的代码失败
- 如何将 QString 的 QList 分配给列表视图?
- 加倍到 QString 并保存在 QJsonDocument 中
- 如何将包含指数的 QString 转换为C++中的双倍?
- 是否可以直接将QString输入(例如)googletest的ADD_FAILURE()宏?
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- 将 QAction 的 QString 文本作为参数传递
- 如何计算QString开头的重复字符?
- 将 nullptr QVariant 与空 QString 进行比较,在 Qt5.9 和 Qt5.12 中给出了不同的输
- 已将 QSet 填充为可选参数
- 在Qt-cpp中通过像素获取QString的子字符串
- 在 QSet 中插入元素<QString>并检索 ,删除 QSet 的最后一项
- 如何初始化QString的常数QSET
- Qt:如何在大小写不敏感模式下减去QString的两个QSet