如何使用STL解决这个问题?

时间:2011-03-17 13:35:27

标签: c++ stl

我有这个问题:在婚姻中有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进行比较的快速方法?

代码段将是非常有用的。 提前谢谢。

2 个答案:

答案 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等方法。 我的第一个想法是将您的成员字符串数组转换为更方便处理的内容。

http://www.sgi.com/tech/stl/set.html