假设,我有几个像这样的整数元素:
(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 vector
的 tuple
如果需要,可以只使用 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)观。
它是如何工作的是一个新的 tuple
由 emplace_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/