#include <vector>
#include <string>
template <typename Comparable>
const Comparable & findKthLargest( const std::vector<Comparable> & v, const int k){
int counter;
Comparable j;
for (Comparable i : v){
counter = 0;
j = v[i];
for(Comparable p : v){
if(v[p] > j){
counter++;
}
}
if(counter == k){
return v[i];
}
}
return -1;
}
我传递了一个可比较的向量和一个整数k。我需要找到给定数组中最大的“kth”。这段代码的工作原理是迭代一次可比较的向量,并检查向量中有多少其他可比对象比它大。 (数组中最大的元素将产生0,第二大元素将产生1)。例如:
我通过了矢量:
{ 5,4,7,6,3,8,4,9 }
并且测试运行是:
REQUIRE( findKthLargest(kth_ints, 0) == 9);
REQUIRE( findKthLargest(kth_ints, 1) == 8);
REQUIRE( findKthLargest(kth_ints, 3) == 6);
我正在通过前两个,而不是第三个(我想我得到4而不是6)。我想我应该在这里使用指针从向量而不是地址中提取实际值,但是我不熟悉这样做的语法,或者我需要*和s&amp; s的确切位置。< / p>