映射和矢量- c++中的stl

Maps and Vectors -STL in C++

本文关键字:c++ 中的 stl 映射      更新时间:2023-10-16

谁能解释一下这段代码的工作原理?它是求向量中两个元素相加得到给定目标的索引。我不明白STL是如何工作的

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
    map<int,int>m;
    vector<int>v;
    if(nums.size()==0)
    {
        return v;
    }
    for(int i=0;i<nums.size();i++)
    {
        if(m.find(nums[i])==m.end())
        {
            m[target-nums[i]]=i+1;
        }
        else
        {
            v.push_back(m[nums[i]]);
            v.push_back(i+1);
        }
    }
    return v;
    }
};

这很简单。假设向量是{8,4,3,2,5},目标是10。你找到的第一个数字是8,所以现在你知道你要找的是2(因为8 + 2等于10)。因此,向映射添加新的目标2和索引8(索引为1,因为索引是以1为基础的)。下一个数字是4,现在你要找的是6,所以6和索引2被添加到映射中。现在地图是这样的

2 ==> 1
6 ==> 2

最终您将在映射中找到一个目标(在本例中我们将找到一个2),映射给我们原始8的索引,并且我们知道2的索引,因为我们刚刚找到了它,所以我们可以输出两个索引。

代码可以改进,但我认为它是有效的