map这个小妖精(*/ω\*)

map这个小妖精(*/ω\*)


1. map是虾米咩

redis晓得咩,就是那个key-value结构的数据库,map这家伙其实就是key-value结构的容器。容器是虾米咩,还好之前看过有关的一丁点,晓得C++里有这个一种类存在,它的名字就叫做容~器~类~~~网上说,容器就是用来存储数据的咩。map是标准STL关联容器,反正有概念就好得了咩,不必太纠结了o( ̄ヘ ̄o#)


2. 它是谁家小妖精咩

来来来,让俺们看看,这小妖精的头文件是哪个咩

#include <map>

既然是map,当然是map家的,有木有猜到咩哈哈哈哈


3. 小妖精长什么样子咩

map<类型1, 类型2> 变量名称

比如酱紫咩

map<string, string> key_value;


4. 小妖精有虾米本领咩

4.1 赋值

map变量有了,俺要给它赋值咩,肿么办呢

听说map有个叫做insert的方法阔以插入数据,插插插

噫,有种污了的错觉绝不是俺的错(*/ω\*),除了使用insert外当然可以它还可以像数组那样通过下标赋值,比如酱紫:map[key] = value

下面是例子咩

#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main(int argc, char **argv)
{
    map<string, string> key_value;
    
    key_value.insert(pair<string, string>("one", "yes_one")); //插插插\(�R��Q)/
    key_value["two"] = "yes_two"; //下标赋值咩O(∩_∩)O~~
                                            
    return 0;
}


4.2 iterator

cplusplus说map家的成员变量有酱酱酿酿的,但俺不认识,俺只认识iterator,所以就说说iterator咩~

iterator这家伙有两个成员变量,一个叫first,存储map的key,一个叫second,存储map的value

而且使用iterator就阔以遍历map晓得咩,就像酱紫滴

#include <iostream>
#include <string>
#include <map>
using namespace std;
            
int main(int argc, char **argv)
{           
    map<string, string> key_value;
    map<string, string>::iterator iter;
            
    key_value.insert(pair<string, string>("one", "yes_one"));
    key_value["two"] = "yes_two";
            
    for(iter=key_value.begin(); iter!=key_value.end(); iter++) { //遍历看这里咩\(�R��Q)/
        cout<<iter->first<<"->"<<iter->second<<endl;  //firsh和second诶         
    }       
            
    return 0;
}


4.3 查找

俺啾一下扔了两个数据进map里了,可俺想找到这两个数据肿么办哦QAQ,因为map是key-value结构,当然是通过key来寻找了,map有个小触手叫做find~find~哟

调用find方法,会返回iterator。

如果find木有找到,则iterator等于map.end(),不要在这个时候试图打印iterator的key和value,因为会发生段错误,虽然俺知道会是这个结果,但俺还是闲得去尝试了%>_<%

#include <iostream>
#include <string>
#include <map>  
using namespace std;
            
int main(int argc, char **argv)
{           
    map<string, string> key_value;
    map<string, string>::iterator iter;
            
    key_value.insert(pair<string, string>("one", "yes_one"));
    key_value["two"] = "yes_two";
    iter = key_value.find("one");  //看这里find小触手
            
    if (iter == key_value.end()) {
        cout<<"iter == key_value.end()\n";
        return -1;
    }       
            
    cout<<"iter->one = "<<iter->first<<endl;  
    cout<<"iter->two = "<<iter->second<<endl; 
            
    return 0;
}


4.4 删除

因为作死去打印不存在的key和value,俺如愿以偿(才木有哼哼)地dump了,所以俺很生气后果很严重,俺要把插进去的数据揪出来扔掉T_T

删除数据阔以用erase,清空数据阔以用clear

#include <iostream>
#include <string>
#include <map>  
using namespace std;
         
int main(int argc, char **argv)
{        
    map<string, string> key_value;
    map<string, string>::iterator iter;
         
    key_value.insert(pair<string, string>("one", "yes_one"));
    key_value["two"] = "yes_two";
    key_value["three"] = "yes_three";
    for (iter=key_value.begin(); iter!=key_value.end(); iter++) {
        cout<<iter->first<<"->"<<iter->second<<endl;
    }   
    cout<<endl;
        
    key_value.erase("two"); //看这里看着里咩
    for (iter=key_value.begin(); iter!=key_value.end(); iter++) {
        cout<<iter->first<<"->"<<iter->second<<endl;
    }   
    cout<<endl;
        
    key_value.clear(); //清空清空清空
    for (iter=key_value.begin(); iter!=key_value.end(); iter++) {
        cout<<iter->first<<"->"<<iter->second<<endl;
    }   
    cout<<endl;                                                           
         
    return 0;
} 

/*
运行结果:
one->yes_one
three->yes_three
two->yes_two

one->yes_one
three->yes_three


*/


噫,又写了一堆废话,不晓得未来的俺看到后会不会有种想掐死俺的冲动咩哈哈哈

你可能感兴趣的:(C++)