Fie*_*Cod 6 c++ stl c++11 c++14
这意味着当我以非递增顺序对v2进行排序时,v1应如下所示:
矢量看起来如下.
v1 = {0, 5, 5, 2, 10};
v2 = {0 ,2, 6, 20, 5};
Run Code Online (Sandbox Code Playgroud)
输出:
v1 = {2, 5, 10, 5, 0};
v2 = {20, 6, 5, 2, 0};
Run Code Online (Sandbox Code Playgroud)
我试图解决混合std::sort和lambdas的问题.这就是我读过几个问题的原因std::sort,没有解决方案可以解决类似我的问题,所以这就是我要问的原因.
我对包含它的用法或C++ 11和C++ 14的其他功能的答案特别感兴趣.
这不是一个问题:
"我完全不知道该怎么办."
我知道如何使用C++ 98实现输出,但我想知道是否有更高效,更漂亮的方法来实现它.
非常感谢你的帮助:)
你可以zip,sort和unzip.
#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, 5, 5, 2, 10};
std::vector<int> v2 = {0 ,2, 6, 20, 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';
}
Run Code Online (Sandbox Code Playgroud)