我有这个问题:在婚姻中有5个人获得最佳选择,每个人被告知回答10个多项选择问题,有4个选项:A,B,C,D。现在最好的匹配指具有最高“相似因子”(sf)的人。例如,如果Dick和Lisa有6个答案正确,并且sf = 3(> 6),那么Dick和Lisa是很好的潜在合作伙伴,同样我们必须找到其他合作伙伴,答案可能是5个,4个或至少3个相同因为sf = 3,所以和Lisa一样正确。
members is a string array having list of all members, first field is name, next is sex,
next are answers to multiple choice questions:
For this, i have a string array called "members"
members[ ] = {"Dick, M, A, B, C, A, B...(10 answers)",
"Lisa, F, A, D, C, B, B...(10 answers)",
"Harry,M, A, B, A, D, C...(10 answers)",
"Mira",F, A, B, C, C, A...(10 answers)"
.
.
<snip>
};
字符串中的第一个字段是名称,第二个字段显示性别,M或F,其他字段显示10个选择题答案。
现在,使用STL找到相似因子的最快方法是什么(多项选择题中的答案相同)?
我知道字符串标记化,并在STL向量中添加这些单独的字段。但是如何找到相似因子呢?我知道常规方法(逐个进行检查),但有没有使用STL进行比较的快速方法?
代码段将是非常有用的。 提前谢谢。
答案 0 :(得分:4)
我不知道这是否是您想要的,但如果您将所有答案都记录到valarray<std::string>
,您可以直接比较这些。结果是valarray<bool>
,如果相应的元素相等则包含true
,否则包含false
。然后,您可以使用以下方式计算它们相等的频率:
std::valarray<bool> = (answers1 == answers2);
int count = std::count(&comp_array[0], &comp_array[0]+comp_array.size(), true);
答案 1 :(得分:0)
也许你可以尝试从问题答案中创建一个std :: set。然后,您可以访问set_difference,set_intersection等方法。 我的第一个想法是将您的成员字符串数组转换为更方便处理的内容。