std::set<string, std::greater<string>> words1 {"one", "two", "three", "four", "five", "six" }; std::set<string, std::greater<string>> words2 { "four", "five", "six", "seven", "eight", "nine"}; std::set<string, std::greater<string>> result; std::set_difference(std::begin(words1) , std::end(words1), std::begin(words2), std::end(words2), std::inserter(result, std::begin(result)),std::greater<string>()); // Result: "two", "three", "one"這裡呼叫的這個版本的函數的第 6 個引數是一個用來比較元素的函數物件,因為來自 set 容器的這段元素也用這個函數排序。通過從 words 集合中移除 word1 和 word2 共有的元素來獲取差集,差集由來自 word1 的元素組成。結果得到 words1 的前三個元素的降序序列。這個演算法也會返回一個疊代器,它指向目的容器被插入的最後一個元素的下一個位置。
std::set<string> words1 { "one", "two", "three", "four", "five", "six" }; std::set<string> words2 {"four", "five", "six", "seven", "eight", "nine"}; std::set_symmetric_difference(std::begin(words1), std::end(words1),std::begin(words2), std::end(words2),std::ostream_iterator<string> {std::cout," "});這個範圍內的元素預設是升序排列的。集合的對稱差集中的元素是兩個集合中不包括它們共有元素的元素。最後一個函數的引數定義了結果集的存放位置,它是一個 ostream_iterator,因此這些元素會被寫入 cout,輸出內容如下:
eight nine one seven three two
自然地,這些序列中的 string 元素都是對它們使用 < 運算子後得到的結果,因為預設的比較函數物件型別是 less<string>。