![](/img/trans.png)
[英]How can I initialize QVector<QVector<QString>> *matrix (as class member) with new?
[英]how to search a QString in QVector
我一直在尝试搜索一个像这样保存在 QVector 中的字符串
QVector<QString> logMessages;
logMessages.append("1- Message");
logMessages.append("2- Message");
logMessages.append("3- Message");
logMessages.append("4- Message");
我曾尝试使用 find 但它对我不起作用,IDE 没有显示任何错误消息,但在调试窗口中,“迭代器显示”的值“不可访问”。
这是我迄今为止尝试过的方法,但是对我不起作用。
QVector<QString>::iterator it = std::find(logMessages.begin(), logMessages.end(), "2");
if(it != logMessages.end())
{
int index = std::distance(logMessages.begin(), it);
}
迭代器不可访问,可能意味着迭代器指向向量的末尾,即在向量中找不到元素。
问题在于std::find
搜索精确匹配,即它使用QString::operator == (const char *)
(请参阅比较字符串)。
您正在寻找以“2-”开头的字符串。 因此,您必须使用std::find_if
和std::find_if
指定自定义相等检查。 一个 lambda 函数:
QVector<QString>::iterator it = std::find_if(logMessages.begin(), logMessages.end(), [](const QString& s){
return s.startsWith("2-"); // check if the element starts with "2-"
});
请注意,使用std::find_if
很慢(对于大型数组),因为它具有O(N)
性能。 使用QHash<int /*id*/, QString /*message*/>
结构可以提高您的查找性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.