因此,我正在尝试制作一个函数,该函数在成对的向量中移动并将第二个值添加到当前目标的先前值中。但是,我不确定如何向后循环以获取之前位于目标之前的所有值。

到目前为止,这是我所做的:

int cWeight (KEY_T key) const
{
    int size = _valueToWeightMap.size();

    for (int x = 0; x < size; x++)
    {
        if (_valueToWeightMap[x].first == key && x == 0)
            return _valueToWeightMap[x].second;

        if (_valueToWeightMap[x].first == key && x != 0)
            return _valueToWeightMap[x].second + _valueToWeightMap[x - 1].second;
    }

    return 0;
}


_valueToWeightMap是向量的名称,而KEY_T只是用于查找字符串的typename

当前,该函数仅从向量中紧随其后的对中获取次要值,但是我希望它从其后的所有值中获取次要值。我将如何去做呢?

这是我添加到向量中的一些内容。

dist1.add("Helmet", 1);
dist1.add("Boots", 10);
dist1.add("Gloves", 20);
dist1.add("Cloud", 15);
dist1.add("Ring", 4);
dist1.add("Wind", 12);


所以,我要的功能是这样的:


位置0的线对的第二个值等于1,因此该函数应返回1。
位置1的对的第二个值等于10,因此该函数应返回11。(10 +1)
位置2的对的第二个值等于20,因此应返回31。(20 + 10 +1)
等等。

最佳答案

使用for循环:

int cWeight (KEY_T key) const
{
    int size = _valueToWeightMap.size();

    for (int x = 0; x < size; x++)
    {
        // Find the appropriate key
        if (_valueToWeightMap[x].first == key)
        {
            // Start with the value of this one
            auto values = _valueToWeightMap[x].second;
            // Add all values lower in the map:
            for (auto i = 0; i < x; ++i)
            {
                values += _valueToWeightMap[i].second;
            }
            return values;
        }
    }

    return 0;
}


在这里,对于第一种情况,您不需要任何特殊处理。

关于c++ - 从vector <pair>中添加第二个值,该值出现在该值之前,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46946404/

10-13 00:08