c++ - std::sort 用于 C++ 中的二维 vector

标签 c++ sorting stdvector

我有一个 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/

相关文章:

c++ - "unix"C++ 预处理器宏未使用 -std=c++11 定义

c++ - 移动时使正方形变大

javascript - 如何使用两个属性对对象数组进行排序,但根据条件按排序顺序有条件地分组?

javascript - 在对数组中找到最接近的数字对的最快方法是什么

c++ - 从 std::vector 删除范围 vector 的最佳方法

c++ - 头文件包含静态分析工具?

python - 如何在python中实现CRTP功能?

sorting - 根据 typescript 中的属性对对象数组进行排序

c++ - 计算大于 vector 中数字的元素

c++ - 在 std::vector 中找不到成员