C++抽象编程——如何修改map中的值

    xiaoxiao2021-04-14  69

    思路的由来

    刚刚在写一个程序,要用到将map中的值给改变,但是那是书本上提供的put()函数(我记得java好像也提供这一类的函数吧),我们的C++并不具有这样的功能,所以我便去搜索了一下大家的建议,发现确实是没有这个函数,要实现还是得自己来。我看的最多的还是说:先用eraser函数擦除,然后我们再进行赋值。没错我一开始我也是这样去想,也打算这样子去做的。就当我准备操作一番的时候,我在C++的网站上看到了让我眼前一亮的map初始化的方式,真的很方便而且我还没见过,先上一份那个网站的代码出来

    // erasing from map #include <iostream> #include <map> int main () { std::map<char,int> mymap; std::map<char,int>::iterator it; // insert some values:这种输入方法很适合我们的习惯 mymap['a']=10; mymap['b']=20; mymap['c']=30; mymap['d']=40; mymap['e']=50; mymap['f']=60; it=mymap.find('b'); mymap.erase (it); // erasing by iterator mymap.erase ('c'); // erasing by key it=mymap.find ('e'); mymap.erase ( it, mymap.end() ); // erasing by range // show content: for (it=mymap.begin(); it!=mymap.end(); ++it) std::cout << it->first << " => " << it->second << '\n'; return 0; }

    思考

    让我眼前一亮的是,这赋值居然可以像数组一样。够方便,而且map容器自带了first,跟second两个成员,分别对应的是key跟value。我们完全可以利用这一点来输出map。 现在,让我们想一想,如果我们可以像数组那样赋值,那么我们是不是也可以像数组那样更改对应的值呢? 猜测不能乱猜,就让我们撸一下代码试试:

    #include <iostream> #include <map> using namespace std; int main(){ map<string,string> mymap; map<string,string>::iterator it;//用于检测改变值后迭代器是否会发生变化 mymap["hello"] = "world"; string key = "hello" ; cout << mymap[key] ; cout << endl; mymap[key] = "redAnt"; cout << mymap[key] ; //输出此时key对应的值 cout << endl; it = mymap.begin(); //将map的首个迭代器的值赋给it cout << (it -> first) << " " << (it ->second); return 0; }

    分析

    我们先把字符串“world”赋值给标签“hello”,然后定义一个string的变量key来储存标签(至于为什么,待会说)。先输出此时key对应的值,(就是“world”)。然后我们将字符串“redAnt”再赋值给key,再输出此时key对应的值。最后用迭代器查看一下是不是覆盖了,还是新建了一个map。答案就是如我们所想的,完美覆盖!结果如下:

    总结

    其实这样子看很简单,我们可以用一个函数来概括如何去修改map中的值:

    void changeMap(map<string,string> &mymap, string key,string value){ mymap[key] = value; }

    运行一下

    #include <iostream> #include <map> using namespace std; void changeMap(map<string,string> &mymap, string key,string value); int main(){ map<string,string> mymap; map<string,string>::iterator it;//用于检测改变值后迭代器是否会发生变化 mymap["hello"] = "world"; string key = "hello" ; cout << mymap[key] ; cout << endl; string value = "redAnt"; changeMap(mymap, key, value); it = mymap.begin(); //将map的首个迭代器的值赋给it cout << (it -> first) << " " << (it ->second); return 0; } void changeMap(map<string,string> &mymap, string key,string value){ mymap[key] = value; }

    结果如下:

    转载请注明原文地址: https://ju.6miu.com/read-670689.html

    最新回复(0)