繁体   English   中英

如何在 QVector 中搜索 QString

[英]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_ifstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM