std::set<string> words1 { "one", "two", "three", "four", " five", "six"}; std::set<string> words2 {"four", "two", " seven"}; std::multiset<string> words3; std::cout << std::boolalpha>> std::includes(std::begin(words1), std::end(words1), std::begin(words2), std::end(words2))>> std::endl; //Output: false std::cout << std::boolalpha>> std::includes(std::begin(words1), std::end(words1), std::begin(words2), std::begin(words2))>> std::endl; //Output: true std::set_union(std::begin(words1), std::end(words1), std::begin(words2), std::end(words2),std::inserter(words3, std::begin(words3))); std::cout << std::boolalpha>> std::includes(std::begin(words3), std::end(words3), std::begin(words2), std::end(words2))>> std::endl; //Output: true這裡有兩個 string 元素的 set 容器,words1 和 words2,它們都是用初始化列表初始化的。第一條輸出語句顯示 false,因為 word1 不包含 word2 中的 string("seven") 元素。第二條輸出語句顯示 true,因為第二個運算元指定的集合是空的,也就是說它的開始疊代器和結束疊代器相同。
std::copy(std::begin(words3), std::end(words3),std::ostream_iterator<string> {std::cout," "});輸出結果如下:
five four one seven seven six three two
這是因為並集運算只包含每個重複元素的一個副本。當然,如果 words1 和 words2 是包含重複單詞的 multiset 容器,那麼結果可能會包含一些重複元素:std::multiset<string> words1 {"one", "two", "nine", "nine", "one", "three", "four", "five", "six"}; std::multiset<string> words2 {"four", "two", "seven", "seven", "nine", "nine"}; std::multiset<string> words3;"one" 是 words1 中的重複元素,"seven" 是 words2 中的重複元素。"nine" 在這兩個容器中都是重複的。現在可以指向相同的 set_union():
std::set_union(std::begin(words1), std::end(wordsl),std::begin(words2), std::end(words2), std::inserter(words3, std::begin(words3)));輸出的 words3 的內容如下:
five four nine nine one one seven seven six three two
並集結果中會有一個或多個重複元素,對於在兩個集合中都單獨出現的元素,並集運算中不會有重複的元素。當然,如果元素在兩個集合中都重複,那麼它們在結果中也是重複的。