開啟章節選單
在排序之後
罕見這個章節是幹嘛的
在前面,我們介紹了如何使用 sort()
函式來排序資料。雖然排序這個動作本身就有很多種不同的應用了(尤其是在四、五級範圍內),但是在排序之後,我們還可以進一步進行一些操作,這邊將會介紹一些只有在排序之後才能進行的進階操作!
unique()
unique()
函式是一個非常有趣的函式,它可以將重複的元素「濾掉」,只保留一個。這個函式的使用方式非常簡單,只需要將排序後的容器傳入即可。
vector<int> v = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4}; sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); // 結果:v = {1, 2, 3, 4}
merge()
merge()
函式可以將兩個已經排序好的容器合併成一個排序好的容器。這個函式的使用方式也非常簡單,只需要將兩個排序後的容器傳入即可。
vector<int> v1 = {1, 3, 5, 7}; vector<int> v2 = {2, 4, 6, 8}; vector<int> v3(v1.size() + v2.size()); // 結果:v3 = {1, 2, 3, 4, 5, 6, 7, 8}
補充
你也許會想說為什麼不把兩個陣列合併後再排序一次呢?這是因為 merge()
的時間複雜度是 ,而排序的時間複雜度是 ,所以如果你已經知道兩個陣列都是排序好的,那麼使用 merge()
會比較快。
簡單來說就是,如果你知道兩個陣列都是排序好的,那麼使用 merge()
會比較快。
時間複雜度的部分在未來的章節會有更詳細的介紹,不過你可以先記住這個觀念。
小測驗
下列哪個函式必須在排序之後才能使用,否則可能會出現預期之外的結果?