2

分享

std::map (C++)

std::map、two sum、LeetCode

map(Key - Value)

鍵與值(Key-Value)。
std 鍵與值

std::map

  • 設置:類似有一排箱子,每個箱子你可以決定箱子的名子(key),箱子打開後放入值(value),若打開同樣名子(key)的箱子,東西則會被往後擺。
  • 尋找:當你要找東西時,先決定你要找箱子的名子,再去打開那個箱子找東西。

標頭檔&命名空間

  

#include <iostream>

#include <map>

using namespace std;

map初始化

  • map<key_type, value_type> 變數;
  

map<int, int> record;

  • 備註:key_type(鍵的型別)、value_type(值的型別)

插入元素

  • 變數.insert( pair< key_type, value_type >( key, value ) );
  • 變數.insert( map<key_type, value_type> :: value_type( key, value ) );
  

record.insert(map<int, int>::value_type(1, 100)); //箱子1,放100

record.insert(map<int, int>::value_type(2, 200)); //箱子2,放200

查找元素

變數.find( )
  • key:變數.find( ) -> first
  • value:變數.find( ) -> second
  

record.find( ) -> first

record.find( ) -> second

備註:如果有找到返回該值(value)的位置,如果沒有則會與變數.end()的值(value)相同
應用
  

for(int i = 0 ; i < sizeof(array); i ++){

        if(record.find( != record.end()){

                record.find( ) -> first  //key

                record.find( ) -> second  //value

        }

        else{

               std::cout << "Not found\n"; 

       }

}

刪除與清空元素

  • 清空:變數.erase(變數.begin(), 變數.end());
  • 刪除key:變數.erase( );
  • 刪除key:變數.erase( 變數.find( ) );
  

record.erase(record.begin(), record.end());

record.erase( );

record.erase(record.find( ));

map的大小

  • 變數.size();
  

int size = record.size();

LeetCode(two sum)

  • int nums[] = {2, 7, 11, 15};
  • int target = 9;
  • 題目:找出nums中,哪兩個數字相加得到target,找出索引index並回傳。
  • 範例答案:[0,1]
參考程式碼(C++)
  • 鍵:矩陣的值
  • 值:索引(index)
  

#include <iostream>

#include <map>

using namespace std;

// Two Sum

int* twoSum(int nums[], int target, int arr[]) {

    int* ptr = nums;

    map<int, int> record;

    for(int i = 0 ; i < sizeof(ptr) ; i++){

        record.insert(map<int, int>::value_type(*(ptr+i), i));

    }

    for(int i = 0 ; i < sizeof(ptr); i ++){

        auto aim = record.find(target - *(ptr+i));

        if(aim != record.end()){

            if(aim-> second == i){continue;}

            arr[0] = i;

            arr[1] = aim -> second;

            return arr;

        }

    }

}


int main(){

    int nums[] = {2, 7, 11, 15};

    int target = 9;

    int arr[2];

    twoSum(nums, target, arr);

    std::cout <<"["<< arr[0] <<","<< arr[1] <<"]"<< std::endl;

}

Output

  

[0,1]

參考資料

[1]. C++ map用法总结(整理)_sevenjoin的博客-CSDN博客_c++map
[2]. LeetCode—1—Two Sum(雜湊表的使用) - IT閱讀 (itread01.com)
[3]. map - C++ Reference (cplusplus.com)
#std  #鍵與值 
分類:學習

文章有錯誤的地方還請留言指正,謝謝各位。(目前C++新手教學第二章內容已完結)。建議或意見可私訊:https://reurl.cc/ze7L9k

評論
上一篇
  • C++ 新手教學0
  • 下一篇
  • 更多文章
    載入中... 沒有更多了