首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在QVector中搜索QString

如何在QVector中搜索QString
EN

Stack Overflow用户
提问于 2020-11-09 00:13:18
回答 1查看 414关注 0票数 0

我一直在尝试搜索一个id,一个保存在QVector中的字符串,如下所示

代码语言:javascript
运行
复制
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“。

这是我到目前为止已经尝试过的方法,但它对我不起作用。

代码语言:javascript
运行
复制
QVector<QString>::iterator it = std::find(logMessages.begin(), logMessages.end(), "2");
if(it != logMessages.end())
{
    int index = std::distance(logMessages.begin(), it);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-09 05:25:03

问题

迭代器不可访问,可能意味着迭代器指向向量的末尾,即在向量中找不到元素。

解决方案

问题是,std::find搜索精确匹配,即它使用QString::operator == (const char *) (参见Comparing strings)。

你正在寻找一个starts with为"2-“的字符串。因此,您必须使用std::find_if和f.ex指定自定义相等性检查。一个lambda函数:

代码语言:javascript
运行
复制
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*/>结构可以提高查找性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64740268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档