我一直在尝试搜索一个id,一个保存在QVector中的字符串,如下所示
QVector<QString> logMessages;
logMessages.append("1- Message");
logMessages.append("2- Message");
logMessages.append("3- Message");
logMessages.append("4- Message");
我尝试过使用find,但它对我不起作用,IDE没有显示任何错误消息,但在debug窗口中显示“iterator display”的值"not accessible“。
这是我到目前为止已经尝试过的方法,但它对我不起作用。
QVector<QString>::iterator it = std::find(logMessages.begin(), logMessages.end(), "2");
if(it != logMessages.end())
{
int index = std::distance(logMessages.begin(), it);
}
发布于 2020-11-09 05:25:03
问题
迭代器不可访问,可能意味着迭代器指向向量的末尾,即在向量中找不到元素。
解决方案
问题是,std::find
搜索精确匹配,即它使用QString::operator == (const char *)
(参见Comparing strings)。
你正在寻找一个starts with为"2-“的字符串。因此,您必须使用std::find_if
和f.ex指定自定义相等性检查。一个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*/>
结构可以提高查找性能。
https://stackoverflow.com/questions/64740268
复制相似问题