C++vectorとunordered_map浅析

6248 ワード

C++に内蔵された配列はコンテナのメカニズムをサポートするが,コンテナの抽象的な意味をサポートしない.この問題を解決するには、私たち自身がこの種類を実現します.標準C++では、コンテナベクトル(vector)で実現されています.コンテナベクトルもクラステンプレートです.vectorの導入は、配列に比べて一連のデータの処理を容易にしたと言えます.スケールオーバーなどのオーバーフロー問題を考慮する必要はありません.
vecorを使用するには、ヘッダファイル#includeを導入する必要があります.ネーミングスペースにはusing std::vectorを導入する必要があります.また、vectorは連続的に保存されています!!!
簡単なストレージ操作:
vector<int> v1;
for (vector<int>::size_type i = 0; i < 10; i++) {
    v1.push_back(i);
}
    cout << "adjective:";
    for (vector<int>::size_type i = 0; i < 10; i++) {
    cout << v1[i] << setw(4);
}

それから穴のこれを比較して、注意すればOKです:
//v1  n   i   
vector<int> v1(n,i);
//v2   n i    
vector<int> v2({n,i});

初期化時に直接v 1[i]=valueではなく、v 1しか使用できないことを覚えておいてください.push_back(i);
詳しくはご覧くださいhttps://www.cnblogs.com/mengfanrong/p/3770971.html
もっと簡単にunordered_を紹介しますmap
C++11規格にはunorderedシリーズの容器が入っています.unordered_mapは要素のhash値を記録し,hash値に基づいて要素が同じか否かを判断する.mapはjavaのTreeMap,unordered_に相当しますmapはHashMapに相当します.検索、挿入にかかわらずunordered_mapの効率はhash_より優れているmapはmapより優れている.空間の複雑さの面ではhash_map最低、unordered_mapに次いでmapが最大です.
導入するヘッダファイル#include、ネーミングスペースはusing std::unordered_を導入する必要がありますmap、私の理解は彼をキー値のペアとして覚えています.すなわち、(key、value)、私たちのファイル管理システムのページテーブルインデックスなど、多くの場合に使われています.リファレンスhttps://www.cnblogs.com/evidd/p/8823092.html
二数和のアルゴリズムを見てみましょう
//     
#include 
#include 
#include 
#include 
using std::cin;
using std::cout;
using std::endl;
using std::vector;
using std::unordered_map;
using std::setw;
class Change {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> res;
        unordered_map<int, int> hash;
        for (int i = 0; i < nums.size(); i++) {
            //
            int another = target - nums[i];
            if (hash.count(another)) {
                //res    , 0   ,          
                res = vector<int>({ hash[another],i });
                break;
            }
            hash[nums[i]] = i;
        }
        cout << nums[res[0]] << setw(2) << nums[res[1]] << endl;
        return res;
    }
};
int main(int argc, char* argv[]) {
    vector<int> array;
    for (vector<int>::size_type i = 0; i < 5; i++) {
        array.push_back(i + 1);
    }
    int target = 6;
    Change c;
    vector<int> change;
    change = c.twoSum(array, target);
    return 0;
}

 
転載先:https://www.cnblogs.com/SHNLQS-1273196803/p/11051218.html