c ++从特定索引中查找向量的argmax
c++ finding argmax of vector from specific indices
从这里,我知道我们可以得到像这样的向量的 argmax
:
vector<int> v{ 3, 1, -14, 1, 5, 9 };
vector<int>::iterator result = max_element(v.begin(), v.end());
int argmaxVal = distance(v.begin(), result);
// argmaxVal = 5 because v[5] = 9
如何从索引 2 到 4 获取矢量的 argmax
?
或者,一般来说,从索引 k 到索引 n,(假设是连续的)。
// argmaxVal = 4 because v[4] = 5
// which is max of v[2], v[3], v[4]
显然我可以这样做:
int VectorArgMax(vector<> v, int start_idx, int end_idx){
int retVal = start_idx;
for (int idx=start_idx; idx<=end_idx; idx++){
if v[idx] > v[retVal]{
retVal = idx;
}
}
return retVal;
}
result = VectorArgMax(v,2,4);
但是使用 max_element
和 distance
是否更快,或者我可以直接使用任何更快的函数?
您只需将输入迭代器调整为 std::max_element
:
std::vector<int>::iterator max = max_element(v.begin() + 2, v.begin() + 4); // [2, 4)
int argmaxVal = distance(v.begin(), max); // absolute index of max
您也可以将 std::vector<int>::iterator
替换为 auto
以方便使用 C++11
。
从这里,我知道我们可以得到像这样的向量的 argmax
:
vector<int> v{ 3, 1, -14, 1, 5, 9 };
vector<int>::iterator result = max_element(v.begin(), v.end());
int argmaxVal = distance(v.begin(), result);
// argmaxVal = 5 because v[5] = 9
如何从索引 2 到 4 获取矢量的 argmax
?
或者,一般来说,从索引 k 到索引 n,(假设是连续的)。
// argmaxVal = 4 because v[4] = 5
// which is max of v[2], v[3], v[4]
显然我可以这样做:
int VectorArgMax(vector<> v, int start_idx, int end_idx){
int retVal = start_idx;
for (int idx=start_idx; idx<=end_idx; idx++){
if v[idx] > v[retVal]{
retVal = idx;
}
}
return retVal;
}
result = VectorArgMax(v,2,4);
但是使用 max_element
和 distance
是否更快,或者我可以直接使用任何更快的函数?
您只需将输入迭代器调整为 std::max_element
:
std::vector<int>::iterator max = max_element(v.begin() + 2, v.begin() + 4); // [2, 4)
int argmaxVal = distance(v.begin(), max); // absolute index of max
您也可以将 std::vector<int>::iterator
替换为 auto
以方便使用 C++11
。