【发布时间】:2014-09-20 04:29:19
【问题描述】:
我想解析两个字符串向量,找出相互匹配的字符串和不匹配的字符串。
我想要得到的示例:
输入向量 1 看起来像:[string1, string2, string3]
输入向量 2 看起来像:[string2, string3, string4]
理想输出:
string1:不匹配
string2:匹配
string3: 匹配
string4: 不匹配
目前我使用此代码:
vector<string> function(vector<string> sequences, vector<string> second_sequences){
for(vector<string>::size_type i = 0; i != sequences.size(); i++) {
for(vector<string>::size_type j = 0; j != second_sequences.size(); j++){
if (sequences[i] == second_sequences[j]){
cout << "Match: " << sequences[i];
}else{
cout << "No Match: " << sequences[i];
cout << "No Match: " << second_sequences[j];
}
}
}
}
它非常适合匹配的那些,但会多次迭代所有内容,
不匹配的会被打印很多次。
我该如何改进?
【问题讨论】:
-
我认为
i = i++应该只是++i(与jobvs 相同)。 -
还对第一个数组进行排序并与第二个数组进行二分搜索作为输入应该会改善您的结果
-
这可以通过排序和使用 set_intersection 和 set_symmetric_difference 来完成。见这里:ideone.com/y0o5St
-
我链接到的实现不仅可以正常工作,而且时间复杂度比您尝试使用的双嵌套循环更快。底线是——如果你正在编写一个听起来像是以前做过的函数,那么很可能有算法函数可以完成这项工作。在给定两个序列的情况下查找不匹配或相同的项目是经常要做的事情,因此有执行此类任务的算法函数。