如何构造元组的向量并像对一样对它们进行排序?

Haf*_*Ovi 4 c++ sorting tuples

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

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

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

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

是否有STL或其他技术来实现这一目标?我发现了Tuples一些问题,但很难理解。
你们能以任何方式帮助我吗?可以通过提供有用的链接或解释过程来实现。

Mat*_*att 5

如果需要vectortuple可以只使用STL来对of 进行排序。

#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;
}
Run Code Online (Sandbox Code Playgroud)

这是这里的示例,只是使用您的值进行了修改。

它是如何工作的tupleemplace_back并构造了一个新向量并将其添加到向量的末尾。您可以push_back(std::make_tuple(...根据需要使用它,但这似乎过于复杂。然后你sortvector其他人一样vector。的默认行为sort是升序。您可以sort通过添加自己的来更改的行为comp。比较函数的参数为​​2 tuples。返回类型是比较的布尔结果。由于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);
....
Run Code Online (Sandbox Code Playgroud)

这将以降序对向量进行排序。您也可以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;
});
Run Code Online (Sandbox Code Playgroud)