首頁  >  文章  >  後端開發  >  如何使用 STL 演算法從未排序的陣列中刪除重複項,同時保持插入順序?

如何使用 STL 演算法從未排序的陣列中刪除重複項,同時保持插入順序?

Linda Hamilton
Linda Hamilton原創
2024-11-11 19:02:03499瀏覽

How to Remove Duplicates from an Unsorted Array While Maintaining Insertion Order Using STL Algorithms?

保留順序的去重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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn