如何将优先级队列中的对推入二维数组?
How to push pair from priority queue into a 2D array?
我正在做一个 leetcode 问题,我需要 return 一个二维结果数组。但是我为此使用了优先级队列,无法将元素移动到二维数组。我无法为此提出语法。
push_back(),当我尝试将这对推入二维数组时不起作用。
这是 link 到 problem
代码-
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& p, int k) {
vector<vector<int>>closest;
//pairp;
priority_queue<pair<int,pair<int,int>>>heap;
for(int i = 0; i < p.size(); i++){
heap.push({p[i][0] * p[i][0] + p[i][1]*p[i][1],
{p[i][0],p[i][1]}});
}
if(heap.size() > k){
heap.pop();
}
while(heap.size() > 0){
pair<int,int>ptr = heap.top().second;
//want to add the statement to copy elements to closest[][] here
heap.pop();
}
return closest;
}
};
添加时出现错误消息,closest.push_back(ptr);
第 22 行:字符 21:错误:没有匹配的成员函数来调用 'push_back'
closest.push_back(ptr);
~~~~~~~~^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1184: 7:注意事项:
候选函数不可行:没有已知的从 'pair<int, int>' 到 'const 的转换
std::vector, std::allocator>>::value_type '(又名 'const std::vector<int, std::allocator>')用于第一个参数
push_back(常数value_type&__x)
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1200:7: 注:候选函数不可行:第一个参数没有从 'pair<int, int>' 到 'std::vector<std::vector<int, std::allocator>, std::allocator<std::vector<int, std::allocator>>>::value_type'(又名 'std::vector<int, std::allocator>')的已知转换
push_back(value_type&& __x)
^
产生了 1 个错误。
// if closet should be your answer then its size will be k
/* Here we tell how many rows
the 2D vector is going to have. And Each row will contain a vector of size 2 */
int row = k;
vector<vector<int>>closest(row, vector<int>(2));
int index = 0;
while(heap.size() > 0) {
pair<int,int>ptr = heap.top().second;
//Added [want to add] the statement to copy elements to closest[][] here
closet[index][0] = ptr.first;
closet[index][1] = ptr.second;
index++;
heap.pop();
}
此外,我想更正您弹出元素的代码。
您应该检查 while 条件而不是 'if' 条件。 'if' 条件只会弹出一次。如下:
while(heap.size() > k){
heap.pop();
}
//如果你想使用push_back那么你可以这样写:
// 也更正上面建议的代码,将 'if ' 条件替换为 'while'
vector<vector<int>>closest(k);
int index = 0;
while(heap.size() > 0){
pair<int,int>ptr = heap.top().second;
closest[index].push_back(ptr.first);
closest[index].push_back(ptr.second);
index++;
heap.pop();
}
我正在做一个 leetcode 问题,我需要 return 一个二维结果数组。但是我为此使用了优先级队列,无法将元素移动到二维数组。我无法为此提出语法。 push_back(),当我尝试将这对推入二维数组时不起作用。 这是 link 到 problem
代码-
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& p, int k) {
vector<vector<int>>closest;
//pairp;
priority_queue<pair<int,pair<int,int>>>heap;
for(int i = 0; i < p.size(); i++){
heap.push({p[i][0] * p[i][0] + p[i][1]*p[i][1],
{p[i][0],p[i][1]}});
}
if(heap.size() > k){
heap.pop();
}
while(heap.size() > 0){
pair<int,int>ptr = heap.top().second;
//want to add the statement to copy elements to closest[][] here
heap.pop();
}
return closest;
}
};
添加时出现错误消息,closest.push_back(ptr);
第 22 行:字符 21:错误:没有匹配的成员函数来调用 'push_back'
closest.push_back(ptr);
~~~~~~~~^~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1184: 7:注意事项:
候选函数不可行:没有已知的从 'pair<int, int>' 到 'const 的转换
std::vector
// if closet should be your answer then its size will be k
/* Here we tell how many rows
the 2D vector is going to have. And Each row will contain a vector of size 2 */
int row = k;
vector<vector<int>>closest(row, vector<int>(2));
int index = 0;
while(heap.size() > 0) {
pair<int,int>ptr = heap.top().second;
//Added [want to add] the statement to copy elements to closest[][] here
closet[index][0] = ptr.first;
closet[index][1] = ptr.second;
index++;
heap.pop();
}
此外,我想更正您弹出元素的代码。 您应该检查 while 条件而不是 'if' 条件。 'if' 条件只会弹出一次。如下:
while(heap.size() > k){
heap.pop();
}
//如果你想使用push_back那么你可以这样写:
// 也更正上面建议的代码,将 'if ' 条件替换为 'while'
vector<vector<int>>closest(k);
int index = 0;
while(heap.size() > 0){
pair<int,int>ptr = heap.top().second;
closest[index].push_back(ptr.first);
closest[index].push_back(ptr.second);
index++;
heap.pop();
}