map中插入数据的方式
第一种:用insert函数插入pair数据
map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1,“student_one”));
第二种:用insert函数插入value_type数据
map<int, string> mapStudent; mapStudent.insert(map<int, string>::value_type (1,"student_one"));
map 是以 pair形式插入的。map中的元素的类型value_type。
第三种:用数组方式插入数据
第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是不能再插入这个数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值,即:如果当前存在该关键字,则覆盖改关键字的值,否则,以改关键字新建一个key—value;
再说两数之和
两趟遍历:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> a;//建立hash表存放数组元素
vector<int> b(2,-1);//存放结果
for(int i=0;i<nums.size();i++)
a.insert(map<int,int>::value_type(nums[i],i));
for(int i=0;i<nums.size();i++)
{
if(a.count(target-nums[i])>0&&(a[target-nums[i]]!=i))
//判断是否找到目标元素且目标元素不能是本身
{
b[0]=i;
b[1]=a[target-nums[i]];
break;
}
}
return b;
};
};
一趟遍历:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int,int> m;
vector<int> vec;
for(int i=0;i<nums.size();i++)
{
int b=target-nums[i];
if(m.count(b)){//count与find或者下标查找的不同之处需要了解,有则返回1,没有则返回0.
vec.push_back(m[b]);
vec.push_back(i);
break;
}
m[nums[i]]=i;
}
return vec;
}
};