将元组的向量转换/构造为堆
converting/constructing vector of tuples into heap
-构造
我构造了一个元组向量CCD_ 1。为了简单起见,我们假设它是这样构造的。
vector<tuple<int,int,int>> x;
for (int ii=0; ii < 10; ii++){
for (int jj=0; jj < 10; jj++){
currpeak[0] = ii + rand() % 10;
currpeak[1] = jj + rand() % 10;
currpeak[2] = rand() % 100;
x.emplace_back(currpeak[0], currpeak[1], currpeak[2]);
}
}
现在,我想根据第三个元素获得n个最大的元组,并将它们附加到另一个变量vector<tuple<int,int,int>> y
。假设n=10
。
-排序
目前我是这样做的:对它们进行反向排序,然后选择前n个元素。
// Sort them by 3rd element
bool sortbythird_desc(const tuple<int,int,int>& a,
const tuple<int,int,int>& b){
return (get<2>(a) > get<2>(b));
}
sort(x.begin(), x.end(), sortbythird_desc);
// Extract the top 10 elements from x and put into y
vector<tuple<int,int,int>> y;
for(int jdx =0; jdx<10; jdx++){
int curr_peak0=get<0>(x[jdx]);
int curr_peak1=get<1>(x[jdx]);
int curr_peak2=get<2>(x[jdx]);
y.emplace_back(curr_peak0, curr_peak1, curr_peak2);
}
然而,由于排序原因,这是O(nlogn)
操作。
-堆尝试失败
如果我可以将x
转换为堆,甚至从一开始就将其构造为堆:O(n)
操作。pop_heap
:O(log n)
次。总共只需要O(n + log n) = O(n)
操作。但是以下失败
// Convert x to a heap
bool Comp(const tuple<int,int,int>& a){
return get<2>(a);
}
make_heap(x.begin(), x.end(), Comp);
错误
Severity Code Description Project File Line Suppression State
Error C2197 'bool (__cdecl *)(const std::tuple<int,int,int> &)': too many arguments for call Shash C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.24.28314includexutility 1481
我如何修改我的代码以将x转换为堆,甚至首先构造1?
最简单的方法是用((运算符传递结构。例如
struct Comp {
bool operator()(const tuple<int,int,int>& a,
const tuple<int,int,int>& b){
return (get<2>(a) > get<2>(b));
}
};
并将其传递给vector<tuple<int,int,int>> x
0
相关文章:
- 将元组的向量转换/构造为堆
- 如何在编译时将齐次元组转换为数组?
- Boost.Hana:在 constexpr 上下文中将值元组转换为相应类型的元组
- 将多个数组转换为元组
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 为什么此元组到引用元组 (std::tie) 转换有效?
- 将树转换为元组的编译时转换
- 如何将标准::数组转换为标准::元组?
- 如何将元组转换为C 11中的字节数组
- 元组尺寸默认构造函数及其转换为std :: size_t
- 使用 hana::transform 在 C++14 中转换元组内的类型
- 将STD ::变体转换为STD ::模板类实例的元组
- 将 integral_constants 元组转换为整数元组
- 错误:无法从"元组<[...]、std::__1::元组<无符号长长、无符号长长>>"到"常量元组<[...],uint_type>"的可行转换
- 将元组转换为变体
- Boost::P ython,将元组转换为Python有效,矢量<tuple>不
- 有没有一种方法可以将左值和右值的列表分别转换为具有引用类型和完整类型的元组
- 等价于元组的std::转换
- 将元组转换为函数参数
- 转换元组类型