如何对一个向量相对于另一个向量进行排序



我有几个向量的数据类型与.相同

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

有任何方法可以对向量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<第二
  2. 如果第二值存在但第一值不存在,则第二<第一
  3. 如果两个值都存在,请比较它们在该向量内的索引值

如果这些条件都不成立,那么现有的比较逻辑就会运行。

相关内容

  • 没有找到相关文章

最新更新