标签:*** lov 形式 使用 迭代器 size_t 关键字 元素 pair
一、迭代器,insert 添加元素。
#include <map> #include <string> #include <iostream> #include <vector> #include <set> using namespace std; int main() { /*********************************** * 关联容器map和set 的关键字都是const不能修改,map的值可以修改. * 修改map 的值 */ /* std::map<int, std::string> m = {{1,"aa"},{2,"bb"},{3,"cc"}}; for(auto iter = m.begin();iter != m.end();iter++) { iter->second = "dd"; std::cout << iter->first <<"\t"<<iter->second <<std::endl; }*/ /*********************************** * //关联容器insert 函数, 插入过程自动过滤已经存在的关键字,因此不会重复 */ /* vector<int> ivec = {2,4,6,8,2,4,6,8}; set<int> set2; set2.insert(ivec.begin(),ivec.end()); //cout<<set2.size()<<endl; set2.insert({1,3,5,7,1,3,5,7}); //cout<<set2.size()<<endl; for(auto iter = set2.begin() ; iter != set2.end();iter++) { cout<<*iter<<endl; } */ /******************* * 向 关联容器 map 添加元素insert 方法的几种插入形式,使用pair * C++ primer 383 * mapped_type : size_t * key_value : string * value_type : pair<string,size_t> * * 检测insert返回值,返回一个pair. * 其first是一个迭代器,指向具有给定关键字的元素 * 其second成员是一个布尔值,表示是否插入成功 */ map<string,size_t> word_count; //不可重复 string word("love"); word_count.insert({word,1}); word_count.insert(make_pair("santana",1)); word_count.insert(pair<string,size_t >("loves",1)); word_count.insert(map<string,size_t >::value_type("dont love",1)); auto ret = word_count.insert({"zhang",1}); //元素已经存在插入失败,否则插入成功 if(ret.second) { cout<<"插入成功"<<endl; //插入成功,指向该关键字的元素 ret.first->second = 5; } else { cout<<"插入失败"<<endl;//如果该元素已经存在.插入失败,迭代器指向这个元素 ret.first->second++; } //cout<<word_count.size()<<endl; for(auto iter = word_count.begin() ; iter != word_count.end() ; iter++) { cout<<iter->first<<endl; cout<<iter->second<<endl; } cout<<"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"<<endl; //可重复 multimap<string,size_t > word_mul;//可重复 word_mul.insert(make_pair("santana",1)); word_mul.insert(pair<string,size_t >("santana",1)); word_mul.insert(multimap<string,size_t >::value_type("dont love",1)); for(auto iter = word_mul.begin() ; iter != word_mul.end() ; iter++) { cout<<iter->first<<endl; cout<<iter->second<<endl; } return 0; }
二、删除元素 erase ,关键字key删除,迭代器iterator删除
#include <map> #include <string> #include <iostream> #include <vector> #include <set> using namespace std; int main() { /*************** * 关联容器删除元素基本操作 * c.erase(k) 删除指定关键字 * c.erase(p) 删除迭代器p指向的元素 * c.erase(b,e) 删除迭代器b, e范围的元素 */ /******************* * 向 关联容器 map 删除erase 元素 c.erase(k) * C++ primer 386 */ map<string,size_t> word_count; //不可重复 string word("love"); word_count.insert({word,1}); word_count.insert(make_pair("santana",1)); word_count.insert(pair<string,size_t >("loves",1)); word_count.insert(map<string,size_t >::value_type("dont love",1)); auto ret = word_count.insert({"zhang",1}); //元素已经存在插入失败,否则插入成功 if(ret.second) { cout<<"插入成功"<<endl; //插入成功,指向该关键字的元素 ret.first->second = 5; } else { cout<<"插入失败"<<endl;//如果该元素已经存在.插入失败,迭代器指向这个元素 ret.first->second++; } /**** * 删除元素,删除一个关键字,返回删除的元素数量 c.erase(k) * 对于不可重复的,erase 返回0 或者 1 , 0表示删除的元素不在容器中,1表示删除ok */ //auto res = word_count.erase("zhang"); if(word_count.erase("zhang")) { cout<<"ok : "<<"zhang "<<" removed"<<endl; } else { cout<<"no :"<<"zhang "<<" not found"<<endl; } for(auto iter = word_count.begin() ; iter != word_count.end() ; iter++) { cout<<iter->first<<endl; cout<<iter->second<<endl; } cout<<"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"<<endl; //可重复 multimap<string,size_t > word_mul;//可重复 word_mul.insert(make_pair("santana",1)); word_mul.insert(pair<string,size_t >("santana",1)); word_mul.insert(pair<string,size_t >("santanaee",1)); word_mul.insert(multimap<string,size_t >::value_type("dont love",1)); /**** * 删除元素,删除一个关键字,返回删除的元素数量 c.erase(k) * 对于可重复的,erase 返回0 或者 删除的元素个数,0表示没有要删除的元素 */ /* auto ant = word_mul.erase("santana"); //此处返回2,表示删除了两个santana元素, cout<<"YES "<<ant<<endl; */ /**** * 删除元素,删除一个迭代器指向的元素 c.erase(p) * 返回一个指向p后的元素 */ /* auto p = word_mul.begin(); auto last = word_mul.erase(p); cout<<last->first<<endl; cout<<last->second<<endl; */ /**** * 删除元素,删除两个迭代器范围的元素 c.erase(b,e) * 返回e * map,set,multimap,multiset的迭代器是没有加减法的,list也不可以,只能用++ --操作 */ auto b = word_mul.begin(); auto e = --word_mul.end(); auto g = --e; //用g会剩余两个元素 auto news = word_mul.erase(b,g); for(auto iter = word_mul.begin() ; iter != word_mul.end() ; iter++) { cout<<iter->first<<endl; cout<<iter->second<<endl; } return 0; }
C++ 关联容器set 和 map 迭代器,insert 添加元素,删除元素。
标签:*** lov 形式 使用 迭代器 size_t 关键字 元素 pair
原文地址:https://www.cnblogs.com/wbscpp/p/13236443.html