我有一个 2D vector InputVector
定义如下:
vector< vector<int> > InputVector(MAX_ITER, vector<int>(inN));
还有一个 vector CR
定义如下:
vector<int> CR(MAX_ITER);
CR[i]
是与 InputVector[i]
相关的属性(注意 i
可以不同于 0
两者都为 MAX_ITER-1
)。现在我想按 CR
的降序对 InputVector
进行排序,即,如果 CR[j]
是所有 CR 中最高的
,InputVector[j]
应该是排序后的新InputVector[0]
。
这可以使用 algorithm
中定义的 std::sort
来完成吗?
最佳答案
这是一个很奇怪的任务,但它是可以完成的。
我会说 - 将 CR[j] 值 push_back 到 InputVector[j],然后编写一个自定义“less”函数来比较最后的元素并 pop_back CR[j] 值。类似的东西:
但看起来您真的应该重新考虑如何存储数据 - 您需要这样的逻辑这一事实是一个警钟。
#include <vector>
#include <algorithm>
#include <iostream>
#include <cassert>
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
struct last_cmp
{
bool operator()(const vi &lhs, const vi &rhs)
{
return lhs.back() > rhs.back();
}
};
void weird_sort(vvi &InputVector, const vi &CR)
{
assert(InputVector.size() == CR.size());
for (size_t i = 0; i < InputVector.size(); i++)
InputVector[i].push_back(CR[i]);
sort(InputVector.begin(), InputVector.end(), last_cmp());
for (size_t i = 0; i < InputVector.size(); i++)
InputVector[i].pop_back();
}
int main()
{
vvi InputVector;
vi CR;
InputVector.push_back(vector<int>(5, 0));
InputVector.push_back(vector<int>(5, 1));
InputVector.push_back(vector<int>(5, 2));
InputVector.push_back(vector<int>(5, 3));
InputVector.push_back(vector<int>(5, 4));
CR.push_back(3);
CR.push_back(2);
CR.push_back(0);
CR.push_back(1);
CR.push_back(4);
weird_sort(InputVector, CR);
for (int i = 0; i < InputVector.size(); i++)
cout << InputVector[i][0] << endl;
}
关于c++ - std::sort 用于 C++ 中的二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813652/