Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将一个向量相对于另一个向量排序?_C++_Sorting_Vector_Stl_Stl Algorithm - Fatal编程技术网

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

C++ 如何将一个向量相对于另一个向量排序?,c++,sorting,vector,stl,stl-algorithm,C++,Sorting,Vector,Stl,Stl Algorithm,我有几个向量的数据类型与 v < int > = {5,4,1,2} v2 < int > = {2,4,3,5,1,6,8,7} v3 < int > = {1,4,2,3} 对一些人来说,这可能还不清楚。 让我解释一下。 排序向量有两部分,一部分是A,另一部分是B。 A包含向量v的元素,即A是v的子集,其顺序与v中的顺序相同 B包含给定向量(v_i)的剩余元素{v_i-A},并对其进行排序。 所以对于向量v2,在排序之后 v2 =

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

   v  < int > = {5,4,1,2}
   v2 < int > = {2,4,3,5,1,6,8,7}
   v3 < int > = {1,4,2,3}
对一些人来说,这可能还不清楚。 让我解释一下。
排序向量有两部分,一部分是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} 
类比较{
公众:
奇异比较(const向量&排序):排序uz(排序){}
布尔运算符()(整数a,整数b)常量{
自动索引_a=find(排序_u.begin(),排序_u.end(),a);
自动索引_b=find(排序_u.begin(),排序_u.end(),b);
返回make_对(索引a,a)

。提高效率是留给读者的一项练习(提示:查看
std::find
调用)。

您只需要使用以下规则扩充比较函数:

  • 如果第一个值存在于要排序的向量中,但第二个值不存在于该向量中,则第一个值<第二个值
  • 如果第二个值存在,但第一个值不存在,则第二个值<第一个值
  • 如果两个值都存在,则在该向量内比较它们的索引值

  • 如果这些条件都不成立,现有的比较逻辑将运行。

    注意,这里没有STL,也没有头
    算法.h
    。现在还不完全清楚(至少对我来说)您在这里想要实现什么。你将A与B进行排序是什么意思(无论A和B的值是多少)?检查它是否存在@user3919801应该是,而不是
    算法.h
    。你的描述仍然清晰的像秋天的伦敦雾。@ WooCurig更新,它在旧编译器中:PIT在旧编译器中不工作,比C++ 11少。即它在C++ 11中工作。检查这里,我尝试将auto更改为int,但仍然不起作用。它不应该是
    int
    -使其成为
    vector::const\u迭代器
     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));