qt 字符串去重
时间: 2023-06-29 21:20:32 浏览: 158
你可以使用 Qt 的 QSet 类来实现字符串去重。首先,将字符串分割成单个字符,然后将这些字符添加到 QSet 中,由于 QSet 自身的特性,会自动去除重复的字符。最后,将 QSet 中的字符再组合成字符串即可。
以下是一个示例代码:
```cpp
QString str = "hello world";
QSet<QString> charSet;
for (int i = 0; i < str.length(); i++) {
charSet.insert(QString(str[i]));
}
QString result;
foreach(QString s, charSet) {
result += s;
}
qDebug() << result; // 输出 "helo wrd"
```
其中,`charSet.insert(QString(str[i]))` 将一个字符转换为字符串并添加到 QSet 中。`foreach` 循环用于遍历 QSet 中的所有字符,并将它们拼接成一个新的字符串。
相关问题
QT中如何将QMultiMap<QString, QStringList> 去重后转换为QMap<QString, QStringList>
将`QMultiMap`去重后转换为`QMap`可以参考上面的两个问题的回答,其中第一个问题中给出了`QMultiMap`去重的代码。在去重后,可以使用类似的方式将`QMultiMap`转换为`QMap`。
以下是完整代码:
```
QMultiMap<QString, QStringList> multiMap;
multiMap.insert("key1", QStringList() << "value1" << "value2");
multiMap.insert("key2", QStringList() << "value1" << "value3");
multiMap.insert("key2", QStringList() << "value4" << "value5");
// 去重
QMultiMap<QString, QStringList> uniqueMultiMap;
foreach(const QString& key, multiMap.uniqueKeys()) {
QSet<QStringList> valuesSet;
foreach(const QStringList& value, multiMap.values(key)) {
valuesSet.insert(value);
}
uniqueMultiMap.insert(key, valuesSet.toList());
}
// 转换为QMap
QMap<QString, QStringList> map;
foreach(const QString& key, uniqueMultiMap.uniqueKeys()) {
QStringList values;
foreach(const QStringList& value, uniqueMultiMap.values(key)) {
values.append(value.join(", "));
}
map.insert(key, values);
}
qDebug() << map; // 输出 { "key1": ["value1, value2"], "key2": ["value1, value3", "value4, value5"] }
```
以上代码中,我们首先构造了一个`QMultiMap<QString, QStringList>`类型的对象`multiMap`,其中包含了三个键值对,且`key2`对应了两个值。然后使用类似第一个问题中的方法将`multiMap`去重为`uniqueMultiMap`,其中每个键对应的值是一个不包含重复值的`QStringList`类型的对象。最后使用类似第二个问题中的方法将`uniqueMultiMap`转换为`QMap`类型的对象`map`,其中每个键对应的值是一个包含所有值的字符串的`QStringList`类型的对象,最后输出`map`的值。
qt c++ 去除QVector<QString>中重复的QString
在Qt C++中,如果你想要从`QVector<QString>`中去除重复的字符串,可以使用`QSet<QString>`或者通过自定义迭代器来实现。这里提供两种方法:
1. 使用`QSet<QString>`:
```cpp
QVector<QString> vectorWithDuplicates;
// ... (填充vector)
QSet<QString> uniqueStrings(vectorWithDuplicates.begin(), vectorWithDuplicates.end());
QVector<QString> uniqueVector(uniqueStrings.begin(), uniqueStrings.end()); // 由于QSet不允许重复元素,所以uniqueStrings就是去重后的集合
```
2. 自定义迭代器并添加到新的QVector:
```cpp
QVector<QString> vectorWithDuplicates;
// ... (填充vector)
QVector<QString> uniqueVector;
for (auto it = vectorWithDuplicates.begin(); it != vectorWithDuplicates.end(); ++it) {
if (std::find(uniqueVector.begin(), uniqueVector.end(), *it) == uniqueVector.end()) {
uniqueVector.push_back(*it);
}
}
```
阅读全文