首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将向量相对于另一个向量排序?

如何将向量相对于另一个向量排序?
EN

Stack Overflow用户
提问于 2014-09-24 19:46:58
回答 2查看 535关注 0票数 0

我几乎没有数据类型相同的向量。

代码语言:javascript
复制
   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}。

代码语言:javascript
复制
Edit:

对某些人来说,这可能还不清楚。让我解释一下..。

排序向量有两个部分,一个是A,另一个是B。

A包含向量v的元素,即A是v的子集,它遵循与v中相同的顺序

B包含给定向量(v_i- A}的剩余元素{v_i-A},并对其进行排序.

因此,对于向量v2,排序后,它将是

代码语言:javascript
复制
 v2 = A union B
 A = {5,4,1,2}
 B = {3,6,7,8} 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-24 20:30:45

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-09-25 12:58:05

您只需要使用以下规则来增强比较功能:

  1. 如果第一个值存在于要排序的向量中,但其中不存在第二个值,则第一个值<第二个
  2. 如果第二个值存在,但第一个值不存在,则第二个值<第一个
  3. 如果这两个值都存在,则在该向量中比较它们的索引值。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26025234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档