码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 关联容器set 和 map 迭代器,insert 添加元素,删除元素。

时间:2020-07-04 22:19:26      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:***   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!