multiset多重集合容器
multiset与set一样, 也是使用红黑树来组织元素数据的, 唯一不同的是, multiset允许重复的元素键值插入, 而set则不允许.
multiset也需要声明头文件包含"#include<set>", 由于它包含重复元素, 所以, 在插入元素, 删除元素, 查找元素上较set有差别.
 
1.1multiset元素的插入
下面这个程序插入了重复键值"123", 最后中序遍历了multiset对象.
#include<set>
#include<string>
#include<iostream>
using namespace std;
 
int main()
{
    //定义元素类型为string的多重集合对象s, 当前没有任何元素
    multiset<string> ms;
    ms.insert("abc");
    ms.insert("123");
    ms.insert("111");
    ms.insert("aaa");
    ms.insert("123");
    multiset<string>::iterator it;
    for(it = ms.begin(); it != ms.end(); it++)
    {
        cout << *it << endl;
    }
    return 0;
}
/*
111
123
123
aaa
abc
*/
 
1.2multiset元素的删除
采用erase()方法可以删除multiset对象中的某个迭代器位置上的元素, 某段迭代器区间中的元素, 键值等于某个值的所有重复元素, 并返回删除元素的个数. 采用clear()方法可以清空元素.
下面这个程序说明了insert()方法的使用方法:
#include<set>
#include<string>
#include<iostream>
using namespace std;
 
int main()
{
    //定义元素类型为string的多重集合对象s, 当前没有任何元素
    multiset<string> ms;
    ms.insert("abc");
    ms.insert("123");
    ms.insert("111");
    ms.insert("aaa");
    ms.insert("123");
    multiset<string>::iterator it;
    for(it = ms.begin(); it != ms.end(); it++)
    {
        cout << *it << endl;
    }
    //删除值为"123"的所有重复元素, 返回删除元素的总数2
    int n = ms.erase("123");
    cout << "Total Delete : " << n << endl;
    //输出删除后的剩余元素
    cout << "all elements after deleted : " << endl;
    for(it = ms.begin(); it != ms.end(); it++)
    {
        cout << *it << endl;
    }
    return 0;
}
 
/*
111
123
123
aaa
abc
Total Delete : 2
all elements after deleted :
111
aaa
abc
*/
 
1.3查找元素
使用find()方法查找元素, 如果找到, 则返回该元素的迭代器位置(如果该元素存在重复, 则返回第一个元素重复元素的迭代器位置); 如果没有找到, 则返回end()迭代器位置.
下面程序具体说明了find()方法的作用方法:
#include<set>
#include<string>
#include<iostream>
using namespace std;
 
int main()
{
    multiset<string> ms;
    ms.insert("abc");
    ms.insert("123");
    ms.insert("111");
    ms.insert("aaa");
    ms.insert("123");
    multiset<string>::iterator it;
    //查找键值"123"
    it = ms.find("123");
    if(it != ms.end()) //找到
    {
        cout << *it << endl;
    }
    else
    {
        cout << "not find it!" << endl;
    }
    it = ms.find("bbb");
    if(it != ms.end()) //找到
    {
        cout << *it << endl;
    }
    else
    {
        cout << "Not Find It!" << endl;
    }
    return 0;
}
 
/*
123
Not Find It!
*/

C++STL之multiset多重集合容器的更多相关文章

  1. multiset多重集合容器(常用的使用方法总结)

    关于C++STL中multiset集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. multiset多重集合容器和set集合容器的使用方法大多相同,不同的是multiset多重集合容器允许重复 ...

  2. multiset多重集合容器

    跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,仅仅是multiset多重集合容器同意将反复的元素键值插入.元素的搜索依旧具有对数级的算法时间复杂度,find和equal_ra ...

  3. Multiset ------ 多重集合

    Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...

  4. STL中的set集合容器进行集合运算:并、交、差实例

    集合容器的集合运算:并.交.差: #include "stdafx.h" #include <iostream> #include <set> #inclu ...

  5. multiset基础学习,可以有重复类型的多重集合容器

    #include <set> #include <iostream> using namespace std; struct Student { char *name; int ...

  6. C++STL之set集合容器

    set集合容器 set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构, 在 插入元素时, 它会自动调整二叉树的排列, 把该元素放到适当的位置, 以确保每个子树根节点的键 ...

  7. stl之multiset容器的应用

    与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,仅仅是multiset容器同意将反复的元素健值插入.而set容器则不同意. set容器所使用的C++标准头文件set.事实上 ...

  8. C++ STL set集合容器

    汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ #include ...

  9. 2.8 C++STL set/multiset容器详解

    文章目录 2.8.1 引入 2.8.2 代码示例 2.8.3 代码运行结果 2.8.4 对组pair的补充 代码实例 运行结果 总结 2.8.1 引入 set/multiset容器概念 set和mul ...

随机推荐

  1. 安装tomcat时遇到的问题

    1.刚开始在eclipse配置的tomcat是免安装的,后来提示 所以后来配置了一个安装版的. 2.后来运行server发现报错:8080,8005,端口被占用,然后关闭xammp上的server,然 ...

  2. json处理第一篇:利用Jackson处理json

    利用Jackson处理json需要导入的jar包(2以上版本的): <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.c ...

  3. Fortran和C的编译器PGI部署

    平台信息 Description: CentOS Linux release 7.6.1810 (Core) 安装步骤 获取PGCC:社区版是免费的,自带license.dat 解压下载的压缩包:ta ...

  4. cpp 学习笔记

    1.C++中模仿gets是  getline(cin, string object) #include <bits/stdc++.h> #define IOS ios::sync_with ...

  5. 随笔1:Markdown语法学习

    学习背景 日常工作学习的时候,总喜欢用有道在线笔记记录点东西,不过以往都没太在意笔记的整理和排版,代码或者图片什么的都是直接贴在笔记上,不美观不说,有些代码格式也不容易进行区分,格式也在复制的时候容易 ...

  6. Java基础14-多维数组

    1.二位数组可以看成以数组为元素的数组 2.java中多维数组的声明和初始化一样,应该从高维到低维的顺序进行,例如 int[][] a=new int[3][]; a[0]=new int[2]; a ...

  7. 在线编辑word文档代码

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. php7.0.24-nts配置步骤

    php-cgi.exe文件运行 php-cgi.exe -b 127.0.0.1:9000 -c D:/myphp2017/php7-nts/php.ini nginx命令 启动 start ngin ...

  9. ASP.NET操作DataTable各种方法

    转:http://www.cnblogs.com/isking/p/6178268.html http://www.cnblogs.com/sntetwt/p/3496477.html public ...

  10. C#操作Excel报错:服务器出现意外情况。

    C#操作Excel表格时,如遇以下错误: 服务器出现意外情况.(异常来自 HRESULT:0x80010105(RPC_E_SERVERFAULT)) 解决方案: 打开你电脑中的Office-Exce ...