如何为begin()和end()迭代器指定一个范围,以便在向量的向量中找到子向量的第一个值



嗨,我是STL的矢量和其他部分的新手,我想得到一些帮助,我有一个字符串矢量的矢量,在每个子矢量的索引处包含一个主题例如arr[1][0]=";topic1";,其中arr[1][1].n]包含与";topic1";,

为了找到topicID的值,即包含主题的子向量的索引,我将find((与begin((和end((迭代器一起使用,并有效地检查所有值,直到匹配为止,这是非常低效的,因为我知道主题将始终处于arr[I][0],主题中的n条消息会使复杂性变得更糟。

我目前的方法如下所示,我如何重构它以仅检查arr[I][0]处的元素的arr长度?

int getTopicID(vector< vector<string> >& arr, string topic)
{
int topicID = 0;
for (size_t m = 1; m < arr.size(); ++m)
{
auto i = find(arr[m].begin(), arr[m].end(), topic); 
if (arr[m].end() != i) { topicID = m; break; }
else { topicID = 0;}
}
return topicID;
} 

感谢您的帮助:(

我如何重构它,只检查arr[I][0]处的元素的arr长度?

不要在所有元素上循环(std::find是不必要的内部循环(。将外环主体替换为:

if (arr[m][0] == topic) {
return m;
}

循环后:

return 0;

p.S.您可以用std::find_if替换外循环。

最新更新