为了简化我的问题,假设我有一个存储一些值的数组:
int Costs[5] = {40, 50, 10, 10, 30};
我有一个用于存储ID的向量
std::vector<int> id = { 4,0,1 };
因此,例如,Costs [ id [ 0 ] ]
将返回值30,依此类推
我需要INDEX数字,其值将指向Costs数组中的最低值。
在我的示例中,我需要的索引为0
,因为Costs[id[0]]
低于Costs[id[1]]
或Costs[id[2]]
因此,如果我要创建一个函数,我不希望它返回id[0]
所持有的函数;我希望它返回0
,这是索引/元素编号。
如果有人能帮我编码,我将不胜感激。
答案 0 :(得分:0)
直接来自http://en.cppreference.com/w/cpp/algorithm/min_element
如果我理解正确,你想获得数组中最小元素的索引
这应该适用于矢量和数组
std::vector<int> v{3, 1, 4, 1, 5, 9};
// We need to get the min value
std::vector<int>::iterator result = std::min_element(std::begin(v), std::end(v));
// Then we get the index of the value in the array
std::cout << "min element at: " << std::distance(std::begin(v), result);
你可以做的是首先在id值的位置获取Cost数组的所有值,并将它们存储在临时的std :: vector中。
根据你的代码,你可以使用迭代器覆盖id中包含的值,在循环内部使用std :: vector push_back()函数将元素添加到Cost [id]的位置。
然后应用上面提到的std :: min_element和std :: distance来获取索引。请注意,这将返回id向量的索引,从那里得到的值只是ids的一个问题[index]
答案 1 :(得分:0)
这是完整的测试代码。感谢Jointts解释如何做到这一点。
int Costs[5] = { 40, 50, 10, 0, 90 };
std::vector<int> id = { 4,1,0 };
std::vector<int> temp;
for (int i = 0; i < id.size(); i++)
{
temp.push_back(Costs[id[i]]);
}
std::vector<int>::iterator lowest = std::min_element(std::begin(temp), std::end(temp));
std::cout << "min element at: " << std::distance(std::begin(temp), lowest) << std::endl;