c++ - 如何构建一个元组 vector 并像对一样对它们进行排序?

标签 c++ sorting tuples

假设,我有几个像这样的整数元素:

(3 9 1), (1 5 2), (2 8 3), (1 4 4), (1 6 5), (1 5 6)

现在我想对元素进行排序,例如对 vector 进行排序。唯一不同的是,这里我们有 3 个键,而不是 2 个键。排序后的元素将如下所示:

(1 4 4), (1 5 2), (1 5 6), (1 6 5), (2 8 3), (3 9 1)

是否有任何 STL 或其他技术可以实现此目的?我发现了元组,但在理解它时遇到了一些问题。
你们能以任何方式帮助我吗?可能是通过提供有用的链接或解释过程。

最佳答案

A vectortuple如果需要,可以只使用 STL 进行排序。

#include <vector>
#include <tuple>
#include <iostream>
#include <algorithm>

int main(int argc, char * argv[]){

    std::vector< std::tuple<int, int, int> > myVec;

    myVec.emplace_back(3, 9, 1);
    myVec.emplace_back(1, 5, 2);
    myVec.emplace_back(2, 8, 3);
    myVec.emplace_back(1, 4, 4);
    myVec.emplace_back(1, 6, 5);
    myVec.emplace_back(1, 5, 6);

    std::sort(myVec.begin(), myVec.end());

    for (auto i : myVec){
        std::cout << std::get<0>(i) << ", " << std::get<1>(i) << ", " << std::get<2>(i) << '\n';
    }

    return 0;
}

这是来自 here 的示例刚刚修改了你的值(value)观。

它是如何工作的是一个新的 tupleemplace_back 构成并添加到 vector 的末尾。你可以使用 push_back(std::make_tuple(...如果你愿意,但这似乎过于复杂。那你sort vector和其他任何人一样vector . sort 的默认行为正在上升。您可以更改 sort 的行为通过添加您自己的 comp .比较函数的参数将是 2 tuple秒。返回类型是比较的 bool 结果。自 tuple我们已经有了所有的比较(<><= 等),您不需要重新定义它们。您也可以使用它来比较不同的事物,只是变得更加复杂。

bool myFunction(const std::tuple<int, int, int> &i, const std::tuple<int, int, int> &j) {
    return i > j;
}

....
std::sort(myVec.begin(), myVec.end(), myFunction);
....

这将按降序对 vector 进行排序。您可以替换 myFunction还有一个 lambda。

std::sort(myVec.begin(), myVec.end(), [](const std::tuple<int, int, int> &i, const std::tuple<int, int, int> &j) {
    return i > j;
});

关于c++ - 如何构建一个元组 vector 并像对一样对它们进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50105690/

相关文章:

c++ - 在 C++ 中为陷阱生成随机优先级

c++ - 调用 CefBrowserHost::CreateBrowser 时出现 Visual Studio C++ 奇怪的异常

python - 将 Pandas 数据框转换为命名元组列表

list - 在 Python 中以列表(循环方式)迭代对

c++ - 选择模板参数不同的模板类构造器导致编译失败

javascript - 动态生成 div 时 div 排序不起作用

linux - 根据列对一组数据进行排序

algorithm - 是否有一些有效的算法可以在 O(1) 额外空间或最小额外空间中合并 k 个排序数组

Python排序元组列表按值反转和按键不反转(两种不同的方式)

c++ - C/C++ 检索关闭的 Windows 资源管理器窗口的通知