保留順序的去重STL 演算法
給定一個未排序的整數數組,任務是在保留插入的同時刪除重複元素每個整數第一次出現的順序。雖然使用集合的簡單方法可以實現這一點,但利用 STL 演算法的最佳化解決方案提供了更有效率、更優雅的解決方案。
基於 STL 演算法的方法
STL 提供多種有助於高效操作容器的演算法。其中一種演算法是 std::copy_if。此演算法可用於建立一個包含唯一元素的新向量,同時保持其原始順序。
要實作此解決方案,請定義一個謂詞函數,該函數會追蹤先前遇到的元素,並在元素已存在時傳回 false已處理。這確保只有唯一的元素被複製到新向量中。
實作
在C 11 及更高版本中,使用重載的operator() 定義一個函數對象,該函數對象實現謂詞:
template <typename T> struct NotDuplicate { bool operator()(const T& element) { return s_.insert(element).second; // true if element is unique } private: std::set<T> s_; };
將此謂詞與原始向量和目標向量一起傳遞給std::copy_if:
std::vector<int> uniqueNumbers; NotDuplicate<int> pred; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(uniqueNumbers), std::ref(pred));
如果C 11 支援不可用,請使用std::remove_copy_if並反轉謂詞邏輯以獲得相同的結果。
結論
這種方法展示了 STL 演算法在有效操作容器方面的有效性,同時確保遵守所需的排序要求。透過利用 std::copy_if 演算法,您可以從未排序的向量中刪除重複項,同時保留唯一元素的插入順序。
以上是如何使用 STL 演算法從未排序的陣列中刪除重複項,同時保持插入順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!