- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我有一个 vector 说:
vector<pair<pair<int,int>,pair<int,int>>>
具有以下元素:
[(11,13),(2,1)], [(5,6),(1,2)] ,[(9,10),(1,3)] ,[(5,8),(3,4)] ,
[(12,14),(2,7)].
排序后(即主要是关于第二对的第一个值,其次是关于第一对的第二个值...所以排序后的输出应该是这样的:
[(5,6),(1,2)] ,[(9,10),(1,3)] ,[(11,13),(2,1)] ,[(12,14),(2,7)] ,
[(5,6),(3,4)]
我读到如果一个 vector 包含一个对,我们可以使用第一个或第二个值进行排序,但是如果一个 vector 包含嵌套对,我们该如何继续......
编辑:试图实现它,如下所示:https://www.geeksforgeeks.org/sorting-vector-of-pairs-in-c-set-1-sort-by-first-and-second/
代码如下:
bool sortbysecfirst(const pair<pair<int,int>,pair<int,int>> &a,const pair<pair<int,int>,pair<int,int>> &b) {
return (a.second.first < b.second.first);
}
bool sortbyfirstsec(const pair<pair<int,int>,pair<int,int>> &a,const pair<pair<int,int>,pair<int,int>> &b) {
return (a.first.second < b.first.second);
}
sort(arr.begin(),arr.end(),sortbysecfirst);
sort(arr.begin(),arr.end(),sortbyfirstsec);
现在为以下对:
[(11,13)(2,1)],[(5,6)(1,2)],[(9,10)(1,3)],[(5,8)(3,4)],[(6,7)(1,5)],
[(10,15)(5,6)],[(12,14)(2,7)],[(1,2),(1,8)],
答案应该是:
[1, 2, 1, 8], [5, 6, 1, 2], [6, 7, 1, 5], [9, 10, 1, 3], [11, 13, 2, 1], [12, 14, 2, 7],[5, 8, 3, 4], [10, 15, 5, 6],
但我得到这个作为答案:
[1, 2, 1, 8], [5, 6, 1, 2], [6, 7, 1, 5], [5, 8, 3, 4], [9, 10, 1, 3], [11, 13, 2, 1], [12, 14, 2, 7], [10, 15, 5, 6],
最佳答案
您可以使用标准函数 std::tie
在 header 中声明 <tuple>
.
给你。
#include <iostream>
#include <utility>
#include <tuple>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<std::pair<std::pair<int,int>, std::pair<int,int>>> v =
{
{ { 11, 13 }, { 2, 1 } }, { { 5, 6 }, { 1, 2 } }, { { 9, 10 }, { 1, 3 } } ,
{ { 5, 8 }, { 3, 4 } }, { { 12, 14 }, { 2, 7 } }
};
for ( const auto &p : v )
{
std::cout << "{ ";
std::cout << "{ " << p.first.first << ", " << p.first.second << " }, ";
std::cout << "{ " << p.second.first << ", " << p.second.second << " } ";
std::cout << "}, ";
}
std::cout << '\n';
std::sort( std::begin( v ), std::end( v ),
[]( const auto &p1, const auto &p2 )
{
return std::tie( p1.second.first, p1.first.second ) <
std::tie( p2.second.first, p2.first.second );
} );
for ( const auto &p : v )
{
std::cout << "{ ";
std::cout << "{ " << p.first.first << ", " << p.first.second << " }, ";
std::cout << "{ " << p.second.first << ", " << p.second.second << " } ";
std::cout << "}, ";
}
std::cout << '\n';
}
程序输出为
{ { 11, 13 }, { 2, 1 } }, { { 5, 6 }, { 1, 2 } }, { { 9, 10 }, { 1, 3 } }, { { 5, 8 }, { 3, 4 } }, { { 12, 14 }, { 2, 7 } },
{ { 5, 6 }, { 1, 2 } }, { { 9, 10 }, { 1, 3 } }, { { 11, 13 }, { 2, 1 } }, { { 12, 14 }, { 2, 7 } }, { { 5, 8 }, { 3, 4 } },
至于你展示的这段代码
bool sortbysecfirst(const pair<pair<int,int>,pair<int,int>> &a,const pair<pair<int,int>,pair<int,int>> &b) {
return (a.second.first < b.second.first);
}
bool sortbyfirstsec(const pair<pair<int,int>,pair<int,int>> &a,const pair<pair<int,int>,pair<int,int>> &b) {
return (a.first.second < b.first.second);
}
sort(arr.begin(),arr.end(),sortbysecfirst);
sort(arr.begin(),arr.end(),sortbyfirstsec);
然后每次调用std::sort
重新对 vector 进行排序,破坏之前调用设置的顺序。
关于c++ - 根据相对于彼此的不同对值对由嵌套对组成的 vector 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808409/
我有这个析构函数,它在运行时产生错误“vector 迭代器不可取消引用”。 gridMatrix 是一个 std::vector * > * > * > * > 我添加了 typename 和 typ
我有一个 vector 的 vector ,比方说 std::vector > my2dArray; 现在我想要一个 vector ,其中包含 my2dArray 中 vector 的大小。手动这看起
假设我有一些 vector :v1、v2、v3 假设我还有一个 vector 来保存这些 vList = {v1, v2, v3} 如果我同步了 (vList),这是否意味着 v1、v2 和 v3 也
我正在创建一个 char 的二维 vector 数组作为类变量,但我在将 vector 添加到 vector 数组中时遇到了麻烦。 我正在使用 C++ 11 标准运行 gcc。 我尝试使用 vecto
如何修改 Vec基于 Vec 中某项的信息没有对向量的不可变和可变引用? 我已尝试创建一个最小示例来演示我的特定问题。在我的真实代码中,Builder struct 已经是其他答案提出的中间结构。具体
这个问题在这里已经有了答案: What is the idiomatic Rust way to copy/clone a vector in a parameterized function? (
在我的程序中,我有一个整数 vector 的 vector 。现在我想从 vector 的 vector 中取出一个 vector 并在另一个 vector 容器中对其进行操作,但是我得到了错误...
我得到一个vector>数据由 OpenCV 提供。由于某些原因(例如偏移/缩放),我需要转换数据 Point至Point2f 。我怎样才能做到这一点? 例如: std::vector > conto
我有一个函数,该函数应使用来自字符串类型的给定 vector vector 中的某些元素初始化来自字符串类型的空 vector vector 。我的语法看起来像这样 std::vector> extr
我得到一个vector>数据由 OpenCV 提供。由于某些原因(例如偏移/缩放),我需要转换数据 Point至Point2f 。我怎样才能做到这一点? 例如: std::vector > conto
这里有很多类似的问题,但我没有真正找到任何可以特别回答我的问题的问题。 我有一个 vector 的 vector 作为类的属性。另一个属性是 bucket_count。我想将 vector 的 vec
如果我像这样创建一个 vector 的 vector : std::vector> myVectorOfVectors; 然后用一些东西填充它: std::vector myVector1; myVe
我正在用 C++ 编写自定义 vector 类。我对这样的代码有疑问: vector vec; vec.push_back(one); vec.push_back(two);
这是我发布的问题 c++ program for reading an unknown size csv file (filled only with floats) with constant (b
vector> a; for (int i=0;i v(i+1); iota(v.begin(),v.end(),1); a.push_back(v); } a.erase(a.beg
也许已经晚了,但我不明白为什么我会得到一个超出此代码范围的 vector 下标: int m = 3; int n = 2; std::vector> path(m, std::vector(n, 0
这个问题真的很奇怪,我似乎找不到任何导致它的原因。 所以这里有一个赋值运算符重载函数,鸟类和哺乳动物都是 vector 。 (下面是类) const Register& Register::opera
我怎么去 std::vector> 只是 std::vector> ?有真正有效的方法吗? 最佳答案 我会做这样的事情: #include #include int main() { //
我正在尝试将这些 vector 中的一些数据写入文本文件。当我运行代码时,它返回运行时错误。 Category、Product、Cart、Customer和Address都是struct 包含每个 g
显然它会因您使用的编译器而异,但我很好奇执行 vector> 时的性能问题与 vector*> ,尤其是在 C++ 中。具体来说: 假设您的外部 vector 已满,您想要开始将元素插入到第一个内部
我是一名优秀的程序员,十分优秀!