c – 以非递增顺序使用另一个向量对一个向量进行排序
发布时间:2020-12-16 07:48:51 所属栏目:百科 来源:网络整理
导读:这意味着当我以非递增顺序对v2进行排序时,v1应如下所示: 矢量看起来如下. v1 = {0,5,2,10};v2 = {0,6,20,5}; 输出: v1 = {2,10,0};v2 = {20,0}; 我试图解决混合std :: sort和lambdas的问题. 这就是为什么我读了几个关于std :: sort的问题,没有答案可以解决
这意味着当我以非递增顺序对v2进行排序时,v1应如下所示:
矢量看起来如下. v1 = {0,5,2,10}; v2 = {0,6,20,5}; 输出: v1 = {2,10,0}; v2 = {20,0}; 我试图解决混合std :: sort和lambdas的问题. 我对包含它的用法或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'; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |