Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在QVector中搜索QString_C++_Qt_Qstring_Qvector - Fatal编程技术网

C++ 如何在QVector中搜索QString

C++ 如何在QVector中搜索QString,c++,qt,qstring,qvector,C++,Qt,Qstring,Qvector,我一直在尝试搜索一个id,一个保存在QVector中的字符串,如下所示 QVector<QString> logMessages; logMessages.append("1- Message"); logMessages.append("2- Message"); logMessages.append("3- Message"); logMessages.append("4- Message");

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

QVector<QString> logMessages;
 
logMessages.append("1- Message");
logMessages.append("2- Message");
logMessages.append("3- Message");
logMessages.append("4- Message");  
QVector日志消息;
logMessages.append(“1-消息”);
logMessages.append(“2-消息”);
logMessages.append(“3-消息”);
logMessages.append(“4-消息”);
我曾尝试使用find,但它对我不起作用,IDE没有显示任何错误消息,但在debug windwo中,值为“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);
}
QVector::iterator it=std::find(logMessages.begin(),logMessages.end(),“2”);
if(it!=logMessages.end())
{
int index=std::distance(logMessages.begin(),it);
}
问题 迭代器不可访问,可能意味着迭代器指向向量的末尾,即在向量中找不到元素

解决方案 问题是,它会搜索精确匹配,即使用(请参阅)

您要查找的字符串为“2-”。因此,必须使用
std::find_if
和f.ex.a 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-"
});
QVector::iterator it=std::find_if(logMessages.begin()、logMessages.end()、[](const-QString&s){
返回s.startsWith(“2-”);//检查元素是否以“2-”开头
});
性能考虑
请注意,使用
std::find_if
很慢(对于大型数组),因为它具有
O(N)
性能。使用
QHash
结构可以提高查找性能。

QVector::iterator it=std::find(logMessages.begin(),logMessages.end(),“2-Message”)@OP我倾向于以打字错误的形式结束此操作,除非您确认您实际上是在试图查找
“2”
,而不是
“2-Message”
@MohammadA.Dkman。这不是很清楚。“迭代器不可访问。”听起来像是一条编译器错误消息,但上面说的是“返回值”。你到底是什么意思?描述问题时尽量准确。@MohammadA.Dkman好的,这很有帮助。在调试器中,哪一行代码触发该消息?您可以尝试
std::find_if
来指定更复杂的查找条件,也可以只编写for循环和if语句。如果您是初学者,后者更简单。我刚刚使用startsWith()函数解决了我的问题。非常感谢@m7913d