簡體   English   中英

如何針對另一個向量對向量進行排序?

[英]How do I sort a vector with respect to another vector?

我有幾個與向量類型相同的向量。

   v  < int > = {5,4,1,2}
   v2 < int > = {2,4,3,5,1,6,8,7}
   v3 < int > = {1,4,2,3}

有任何方法可以using STL of C++(algorithm)對向量v2,v3 ...對向量v using STL of C++(algorithm)排序,以便

排序后的v2相對於v排序為{5,4,1,2,3,6,7,8},而v3相對於v排序為{4,1,2,3}。

Edit:

對於某些人來說可能還不清楚。 讓我解釋 ..
排序的向量有兩個部分,一個是A,另一個是B。
A包含向量v的元素,即A是v的子集,它遵循與v中相同的順序
B包含給定向量(v_i)的剩余元素{v_i-A},並對其進行了排序。
所以對於向量v2排序后

 v2 = A union B
 A = {5,4,1,2}
 B = {3,6,7,8} 
class StrangeComparison {
public:
  StrangeComparison(const vector<int>& ordering) : ordering_(ordering) {}
  bool operator()(int a, int b) const {
    auto index_a = find(ordering_.begin(), ordering_.end(), a);
    auto index_b = find(ordering_.begin(), ordering_.end(), b);
    return make_pair(index_a, a) < make_pair(index_b, b);
  }
private:
  const vector<int>& ordering_;
};

sort(v2.begin(), v2.end(), StrangeComparison(v));

工作示例 讀者可以提高效率(練習:看一下std::find調用)。

您只需要使用以下規則來增強比較功能:

  1. 如果第一個值存在於要進行排序的向量中,但第二個值不存在,則first <second
  2. 如果第二個值存在但第一個不存在,則第二個<第一個
  3. 如果兩個值都存在,則在該向量中比較它們的索引值

如果這些條件都不成立,則將運行現有的比較邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM