C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 以非递增顺序使用另一个向量对一个向量进行排序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这意味着当我以非递增顺序对v2进行排序时,v1应如下所示:

矢量看起来如下.

v1  = {0,5,2,10};
v2  = {0,6,20,5};

输出

v1 = {2,10,0};
v2 = {20,0};

我试解决混合std :: sort和lambdas的问题.
这就是为什么我读了几个关于std :: sort的问题,没有答案可以解决类似我的问题,所以这就是我要问的原因.

我对包含它的用法或C 11和C 14的其他功能的答案特别感兴趣.

这不是一个问题:

“我完全不知道该怎么办.”

我知道如何使用C 98实现输出,但我想知道是否有更高效和更漂亮的方法来实现它.

非常感谢你的帮助:)

解决方法

您可以压缩,排序和解压缩.
#include <iostream>
#include <vector>
#include <algorithm>

//converts two vectors into vector of pairs
template <typename T,typename U>
auto zip(T t,U u) {
  std::vector<std::pair<typename T::value_type,typename U::value_type>> pairs;
  for (size_t i = 0; i < t.size(); ++i){
    pairs.emplace_BACk(u[i],t[i]);
  }
  return pairs;
}

//converts a vector of pairs,BACk into two two vectors
template <typename T,typename U,typENAME v>
void unzip(V pairs,T & t,U & u) {
  for (auto const& it: pairs){
    u.emplace_BACk(it.first);
    t.emplace_BACk(it.second);
  }
}


int main(){

  //vectors
  std::vector<int> v1  = {0,10};
  std::vector<int> v2  = {0,5};

  //zip vectors
  auto pairs = zip(v1,v2);

  //sort them
  std::sort(pairs.begin(),pairs.end(),std::greater<>());

  //unzip them
  v1.clear();
  v2.clear();
  unzip(pairs,v1,v2);

  //print
  std::cout << '\n';
  for (auto i: v1) std::cout << i << ' ';
  std::cout << '\n';
  for (auto i: v2) std::cout << i << ' ';
  std::cout << '\n';

}

大佬总结

以上是大佬教程为你收集整理的c – 以非递增顺序使用另一个向量对一个向量进行排序全部内容,希望文章能够帮你解决c – 以非递增顺序使用另一个向量对一个向量进行排序所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。