2011-08-25 327 views
3

因此,我們有set<string> aset<string> b,我們希望得到std::set<string> c這將包含將代表a - b(意思是什麼,從a離開,如果我們從它b刪除所有項目,如果b包含超過a或項目中不存在的項目a我們希望保持他們的數字都這樣簡單的數學:5-6 = 03-2 = 1如何獲取兩個std :: set的元素之間的差異<string>?

回答

11

我想你想從<algorithm>std::set_difference()

#include <iostream> 
#include <algorithm> 
#include <set> 
#include <string> 
#include <iterator> 

using namespace std; 

set<string> a; 
set<string> b; 
set<string> result; 


int main() 
{ 
    a.insert("one"); 
    a.insert("two"); 
    a.insert("three"); 

    b.insert("a"); 
    b.insert("b"); 
    b.insert("three"); 

    set_difference(a.begin(), a.end(), b.begin(), b.end(), inserter(result, result.begin())); 

    cout << "Difference" << endl << "-------------" << endl; 

    for (set<string>::const_iterator i = result.begin(); i != result.end(); ++i) { 
     cout << *i << endl; 
    } 

    result.clear(); 
    set_symmetric_difference(a.begin(), a.end(), b.begin(), b.end(), inserter(result, result.begin())); 

    cout << "Symmetric Difference" << endl << "-------------" << endl; 

    for (set<string>::const_iterator i = result.begin(); i != result.end(); ++i) { 
     cout << *i << endl; 
    } 

    return 0; 
} 
1

這應該工作,我猜。

for(set<string> :: iterator it = a.begin(); it != a.end(); ++it) 
{ 
    set<string>:: iterator iter = find(b.begin(), b.end(), *it); 
    if(iter == b.end()) 
    {  // ^^^^^^^ Note: find returns b.end() if it does not find anything. 
     c.insert(*iter) 
    } 
} 
+0

find找不到'NULL',當它找不到元素時,它返回你傳入的「end」迭代器(在本例中爲'b.end()')。 – Dawson

+0

有人能解釋我哪裏出錯了嗎? – Mahesh

+0

@Toolbox - 好的。糾正。 – Mahesh

3

假設你的意思集合的區別:

set_difference

如果你指的是元素之間的比較,這是不是真的有可能來回答一般性或簡單的方法。答案將非常具體到你的問題,這是沒有指定或明確。