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一些问题,但很难理解。
你们能以任何方式帮助我吗?可以通过提供有用的链接或解释过程来实现。
如果需要vector,tuple可以只使用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)
这是这里的示例,只是使用您的值进行了修改。
它是如何工作的tuple,emplace_back并构造了一个新向量并将其添加到向量的末尾。您可以push_back(std::make_tuple(...根据需要使用它,但这似乎过于复杂。然后你sort和vector其他人一样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)
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |