gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:59 43 4
gpt4 key购买 nike

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

(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/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com