c++ 16 map set thread

map

map 就像是python中的字典一样,都是以键值对储存

map<string, string > m;
m["aa"] = "hhh";

//或
m.insert({"bb" , "666"});
m.insert(make_pair("cc" , "777"));

可以通过关键字来对map中的数据进行删除,需要使用map中的关键字 erase

m.erase("bb");

也可以使用迭代器来删除

迭代器是为了表示容器中某个元素位置这个概念而产生的,相当于容器中元素的指针地址,通过迭代器运算可以获取到容器中的元素,迭代器的背后就是指针运算

    //迭代器方式删除。
    for(auto i = m.begin() ; i != m.end() ; i++){
        cout <<i->first << " =  "<< i->second << endl;
        if(i->first == "李四"){
            m.erase(i);
        }
    }

begin() 是获取容器的首个元素的指针, end() 是获取容器最后一个元素指针再偏移后一位的指针,并不是代表最后一位元素

可以通过 []来修改,

m["aa"] = 20;

因为map 是以键值对的方式来存储数据的, 所以可以通过键获取到value

cout << m["aa"] << endl;

其他还有 如 是否有数据判断, m.size()如果map 为空则是0, 非0就是非空, 这个 size 也可以获取大小,map中存在几个数据就是几, 键判断, 如果该键存在,则为 1 m.count()

set

set 就是集合, 里面的数据不可重复,且有顺序

添加 insert
    set<int> s1{3,4,5,6,3};

    s.insert(16);
删 erase

需要用迭代器来删除

    set<int> s1({3,4,5,6,3});
    for(auto p = s1.begin(); p != s1.end() ; p++){
        cout <<*p << endl;
        if(*p == 4){
            s1.erase(p);
        }
    }

也可以将整个集合全部清空, s1.clear()

    set<int> s1({3,4,5,6});
    for(auto p = s1.begin(); p != s1.end() ; p++){
        cout <<*p << endl;
    }

其他还有 如 是否有数据判断, s1.size()如果map 为空则是0, 非0就是非空, 这个 size 也可以获取大小,s1中存在几个数据就是几, 值判断, 如果该set中的值存在,则为 1 ,m.count()
因为set 不是键值对储存的,所以没有修改功能

thread

在编程中线程是很常见的事情, 如 两个任务一起执行
在c++ 中创建一个线程是很方便的, 只需要导入 thread ,然后所以 thread 就可以创建一个线程对象了


using namespace std;

void run(){
for (int i; i <= 10; i++){
cout << i << endl;
Sleep(1000);
}
}


int main() {
    //让该线程执行run函数
    thread t(run) ;
    
    cout << "执行了main函数 " <<endl;
    return 0;
}

这样的代码是出错误的,因为 在main 函数中 没有写 join ,这样程序不会等待线程的执行完毕再停止
而是main 函数中完就会结束进程

如果要等待子线程结束再停止进程,可以使用join 来等待

void run(){
for (int i; i <= 10; i++){
cout << i << endl;
Sleep(1000);
}
}


int main() {
    //让该线程执行run函数
    thread t(run) ;
    
    cout << "执行了main函数 " <<endl;
    t.join()
    return 0;
}

也可以使用 detach不过这样的话线程就和main没有关系了,main函数在执行完依旧会停止程序, 但是 detach表明线程不需要等待, 如果进程关闭,线程被销毁也不会出错

传参

正在在()中传递就可以了



using namespace std;

void run(string  name){
for (int i; i <= 10; i++){
cout << i << endl;
Sleep(1000);
}
}


int main() {
    //让该线程执行run函数
    string name = "laowang";
    thread t(run, name) ;
    
    cout << "执行了main函数 " <<endl;
    t.join()
    return 0;
}
获取线程id

this_thread::get_id()
t.get_id()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值