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. Python练习六十:网页分析,找出里面的正文与链接

    网页分析,找出里面的正文与链接 代码如下: from urllib import request from bs4 import BeautifulSoup request = request.url ...

  2. 图像数据转换成db(leveldb/lmdb)文件(转)

    参考网站:http://www.cnblogs.com/denny402/p/5082341.html 在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格 ...

  3. my.资料收集

    1.平民打书想上个高级反击,高级反击会掉哪个呢[梦幻西游手游吧]_百度贴吧.html http://tieba.baidu.com/p/5292257591?lp=5028&mo_device ...

  4. io基础(字节流、字符流、转换流、缓冲字符流)

    首先需要明确的一点是输入流输出流的输入输出是站在内存的角度看的,读取文件,把文件内容写到内存中,是输入流:写文件,把内存中的数据写到文件中,是输出流. IO操作主要有4个抽象类: 字节输入输出流:In ...

  5. JavaSE---位运算符

    1.Java支持的位运算符有7个: &:按位与 [2个相同取相同.2个不同取0] |:按位或 [2个相同取相同.2个不同取1] ~:按位非 ^:按位异或 [2个相同取0.2个不同取1] < ...

  6. HBase 的Get(读),Put(写),Delete(删),Scan(扫描)和Increment(列值递增)

    一.HBase介绍 1.基本概念 HBase是一种Hadoop数据库,经常被描述为一种稀疏的,分布式的,持久化的,多维有序映射,它基于行键.列键和时间戳建立索引,是一个可以随机访问的存储和检索数据的平 ...

  7. 所有节点配置NTP服务

    主节点: 打开vim /etc/ntp.conf文件 For more information about this file, see the man pages # ntp.conf(), ntp ...

  8. js写ajax并解析json

    function down(t){  var req = createRequest();  //创建request req.open("GET","selectWord ...

  9. MAYA删除不干净

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  10. thinkphp3.2 删除Runtime目录里的缓存文件,标记一下,以下好找。

    操作如下: utility::clearCache("Data"); 或 utility::clearCache("Data-Logs"); class uti ...