C++

2011-04-18 10 views
15

'daki farkı ayarla Bir kümenin başka bir kümenin alt kümesi olduğunu ve farkı bulmak istersek bunu yapmanın en etkili yolu nedir?C++

ex. SÖZDE KOD ben çıkarmak istiyorum

> set<int> set1 = {1 2 3 4 5 6 7 8 9 10} 
> set<int> set2 = {5 6 7} 

set2set1 den:

burada cevap

{1 2 3 4 8 9 10} 
+1

Ne yapmak istersiniz? fark ya da kavşak? kararını ver! ;) – Nim

+2

http://www.cplusplus.com/reference/algorithm/set_difference/ –

+0

[C++ STL set farkı] 'nın olası kopyası (http://stackoverflow.com/questions/283977/c-stl-set-difference) O (n) süresinde çalışan –

cevap

22

Kullanım std::set_difference:

#include <algorithm> 
#include <set> 
#include <iterator> 
// ... 
std::set<int> s1, s2; 
// Fill in s1 and s2 with values 
std::set<int> result; 
std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), 
    std::inserter(result, result.end())); 

Snippet source

11

ben O (n) zamanlı olarak çalışır std::set_difference, kullanırsınız olacaktır. <algorithm> bulundu

+0

', uygulamaya bağlıdır. – orlp

+3

@nightcracker: Hayır, standart tarafından garanti edilir. – ybungalobill

+0

@ybungalobill: Herhangi bir bağlantı? – orlp

-1
+0

{1 2 3 4 5 6 7 8 9 10} - {5 6 7 11} 11? – Will

+0

Evet, çünkü ilk kümede değil. Şimdi görüyorum ki OP, kümenin bir alt setini (orjinalinde olmayan herhangi bir sayı içermeyen) çıkarmayı istedi. Heyecanlandım ve sadece iki set arasında farklı olanı istediğini varsaydım. – Pete

0

Sen std::set_difference işlevini kullanabilirsiniz.

çıkış aralığı bir kopyasını içerdiği her eleman içerir [first1, last1) ve bulunmayan [first2, last2).

2

Sana bir C++ çözüm istedi biliyorum fakat birisinin burada bir Haskell çözüm arayan alırsa:

import Data.Set ((\\), fromList) 

main = do 
    let s1 = fromList [1,2,3,4,5,6,7,8,9,10] 
    let s2 = fromList [5,6,7] 
    print $ s1 \\ s2 

Sonuçlar içinde: [1, 2, 3, 4, 8, 9, 10 ]

+4

Reddetmeli, fakat aşk Haskell, yani +1. – lisyarus

+3

Bu soru, C++, Haskell hakkında değil. Bu soruya bir cevap vermemektedir. Yeterli [itibara] sahip olduğunuz zaman (http://stackoverflow.com/help/whats-reputation) herhangi bir gönderiye yorum yapabilirsiniz (http://stackoverflow.com/help/privileges/comment). – cpburnz

+2

@cpburnz Aslında, bu cevap, Java'da bir çözüm öneren başka bir (zaten silinmiş) cevabın bir şakasıdır :) – lisyarus