可比较的向量。我的代码似乎没有提取正确的值

Comparables in vectors. My code doesn't seem to be pulling the correct values

#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 个)。我想我应该在这里使用指针从向量而不是地址中提取实际值,但我不熟悉这样做的语法,或者我确切需要 * 和 & 的地方。

问题出在您对 range-based for loop 的使用上。它迭代容器中的值,而不是为您提供向量中的索引。

所以在循环中 i 是向量中的