首頁  >  文章  >  後端開發  >  如何在保持順序的同時從未排序的向量中刪除重複項?

如何在保持順序的同時從未排序的向量中刪除重複項?

Linda Hamilton
Linda Hamilton原創
2024-11-13 05:59:02381瀏覽

How to Remove Duplicates from an Unsorted Vector while Maintaining Order?

從未排序的向量中刪除重複項

在各種情況下,保持首次出現的順序,同時從未排序的向量中消除重複項至關重要。雖然利用集合和手動迭代的直接方法是有效的,但可以透過利用 STL 演算法對其進行改進。

為了實現這一點,std::copy_if 演算法提供了一個方便的解決方案。透過定義一個謂詞來追蹤已處理的元素並為重複項傳回 false,我們可以過濾掉所需的元素。

如果 C 11 支援不可用,則可以使用笨拙的名為 std::remove_copy_if 的方法,它的邏輯顛倒了。以下是一個未經測試的範例來說明:

template <typename T>
struct NotDuplicate {
  bool operator()(const T& element) {
    return s_.insert(element).second; // true if s_.insert(element);
  }
 private:
  std::set<T> s_;
};

接下來,可以使用以下程式碼:

std::vector<int> uniqueNumbers;
NotDuplicate<int> pred;
std::copy_if(numbers.begin(), numbers.end(), 
             std::back_inserter(uniqueNumbers),
             std::ref(pred));

在此解決方案中,std::ref 確保有狀態函子不是在演算法內部複製。然而,std::copy_if 並未對所應用函子的副作用施加任何要求。

以上是如何在保持順序的同時從未排序的向量中刪除重複項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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