2013-02-26 53 views
4

我有N個集合讓我們說整數。現在我想要一個函數,它找到了這些集合的交集。例如,對於以下如何查找集合的交集

Set1 = { A, D, E, F, G, L } 
Set2 = { N, K, E, G, B, C } 
Set3 = { K, P, Q, E, F, G } 
Set4 = { Z, Y, C, G, F, E } 

由於E和G在每一套,我應該得到{ E, G }作爲輸出。什麼是最簡單的方法來做到這一點。我知道編寫自己的代碼來完成這件事並不是很困難,但也許已經有STL或任何其他庫函數,對此我很感興趣。

+1

從你期望的輸出來看交集,要*相交*集合,而不是_unite_他們。 – Lumen 2013-02-26 10:55:25

+0

我建議你從複習'union'和'intersection' wrt集合的定義開始。 – 2013-02-26 10:55:38

+0

看看http://rosettacode.org/wiki/Set#C – 2013-02-26 10:57:33

回答

1

請參閱std::set_intersection。 (正如在評論中已經指出的那樣,你可能想路口,沒有工會。)

+0

「兩個有序範圍的交集」 - 他的集合看起來沒有分類給我... – 2013-02-26 10:58:15

+0

也許他的集合是排序的。我們不知道,因爲OP沒有告訴我們他使用的C++表示集。 – Lumen 2013-02-26 11:00:12

+0

@Pukku我認爲如果他的每個集合都沒有重複的元素,他可以用哈希表做得更好。 – 2013-02-26 11:02:58

3

兩個可能的解決方案,我能想到

  1. 商店的集向量。排序使用std::sort向量,並計算使用std::set_intersection
  2. Store中集std::set,這將導致元素被無論如何排序,並使用std::set_intersection
+1

哦,我不知道std :: set總是被排序。 – MetallicPriest 2013-02-26 11:08:50

+0

是的。 class std :: unordered_set是C++ 11中的新成員,它是std :: set的無序版本,而不是使用哈希表進行排序。 – Alex 2013-02-26 11:11:12