セットとマップはどちらも連想コンテナであり、通常は組み込みの言語標準ライブラリであり、次の操作があります。
インサート
s.insert()
検索
if(s.find(nums2[i]) != s.end()) //找到的情况
削除
s.erase(10) //删除10号元素
変更の変更(マップ専用)
セットには以下の特徴があります
- すべての要素にはキーのみがあり、値はありません
- 重複する値を許可しない
- すべての要素が自動的に並べ替えられます
- セットの値はキーであるため、イテレーターを介してセットの値を変更することはできませんが、アクセスすることはできます。
leetcodeトピック
2つの配列が与えられた場合、それらの交点を計算する関数を記述します。
例
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
コード
#include<iostream>
#include<vector>
#include<set>
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> record;
for(int i=0; i<nums1.size(); i++){
record.insert(nums1[i]);
}
set<int> result;
for(int i=0; i<nums2.size(); i++){
if(record.find(nums2[i]) != record.end())
result.insert(nums2[i]);
}
vector<int> res;
//使用迭代器访问set
for(set<int>::iterator iter = result.begin(); iter != result.end(); iter++)
res.push_back(*iter);
return res;
}
};
マップには以下の特徴があります
- すべての要素はキー+値が存在します
- キーを繰り返すことはできません。キーには対応する値があります
- マップのキーは変更できませんが、キーに対応する値は変更できます
マップトラバーサルキー値
map<int, int> record;
for(map<int>::iterator iter = record.begin(); iter != record.end(); iter++){
//first是键, second是值
cout<<iter->first<<" "<<iter->second<<endl;
}
leetcodeトピック
2つの配列がある場合、それらの交点を計算する関数を記述します。配列要素は重複している可能性があります。
例
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
コード
#include<iostream>
#include<vector>
#include<map>
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
map<int, int> record;
for(int i=0; i<nums1.size(); i++)
record[nums1[i]]++;
vector<int> res;
for(int i=0; i<nums2.size(); i++){
if(record[nums2[i]] > 0){
res.push_back(nums2[i]);
record[nums2[i]]--;
}
}
return res;
}
};