如何为 begin() 和 end() 迭代器指定范围以在向量向量中查找子向量的第一个值?
How to specify a range for begin() and end() iterators to find first value of sub vector in a vector of vectors?
您好,我刚接触向量和 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;
}
感谢您的帮助:)
How can I refactor this to check only the element at arr[i][0] for the length of arr?
不要遍历所有元素(std::find
是不必要的内部循环)。将外循环的主体替换为:
if (arr[m][0] == topic) {
return m;
}
循环后:
return 0;
P.S。您可以用 std::find_if
.
替换外循环
您好,我刚接触向量和 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;
}
感谢您的帮助:)
How can I refactor this to check only the element at arr[i][0] for the length of arr?
不要遍历所有元素(std::find
是不必要的内部循环)。将外循环的主体替换为:
if (arr[m][0] == topic) {
return m;
}
循环后:
return 0;
P.S。您可以用 std::find_if
.