C ++セットとマップの使用-(leetcodeの2つの配列の共通部分)

セットとマップはどちらも連想コンテナであり、通常は組み込みの言語標準ライブラリであり、次の操作があります。

インサート

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;
    }
};

おすすめ

転載: blog.csdn.net/UCB001/article/details/106840586