c++ - 如何对 vector 或 deque KeyPair 进行排序

标签 c++ vector int deque std-pair

我有一个 deque <pair<int, int> > r; . 我需要按第二个参数对所有内容进行排序,并返回一个 deque<int>首先是所有参数。 例如:

deque<pair<int, int> > r;
r.push_back(make_pair(1, 5));
r.push_back(make_pair(0, 8));
r.push_back(make_pair(7, 3));
r.push_back(make_pair(2, 1));

我需要这个结果

{2, 7, 1, 0}

我有一个“蛮力”所有值都为 N2 的工作方法,但它非常糟糕。 也许存在这个 std:: ?我希望你能帮助我。

最佳答案

你只需要定义一个比较运算符来处理你的对中的第二个项目:

std::sort(r.begin(), r.end(), 
    [](std::pair<int, int> const &a, std::pair<int, int> const &b) {
         return a.second < b.second;
    }
);

...或者,如果您不能使用 lambda(例如,使用太旧的编译器),您可以显式定义仿函数:

template <class T>
struct by_second { 
    bool operator()(T const &a, T const &b) { 
        return a.second < b.second;
    }
};

std::sort(r.begin(), r.end(), by_second());

从那里开始,就是获取每对中的第一项并将其放入结果中:

std::transform(r.begin(), r.end(), std::back_inserter(result),
    [](std::pair<int, int> const &p) { return p.first; });

关于c++ - 如何对 vector 或 deque KeyPair 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15666305/

相关文章:

c++ - move unique_ptr<T> 的 vector

java - 令人困惑的增量使用

c++ - 检测纯 C++ 中的精度损失

c++ - 如何检测opencv中所有具有相同颜色值的相邻像素

c++ - 通过重载下标运算符()从矩阵获取 vector

c++ - 如何在拒绝 float 和空格的同时接受整数输入?

c - 从字符串 C 中获取 int 值

c++ - 在对象内的数组中设置值

c++ - 使用更多像素时 Neopixel 示例代码崩溃

c++ - 将数组数据插入 vector 时不保存