C++STL之multiset多重集合容器

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!

*/

原文地址:https://www.cnblogs.com/mjn1/p/10311785.html

时间: 2024-07-31 15:14:58

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

multiset多重集合容器

跟set集合容器相比,multiset多重集合容器也使用红黑树组织元素,仅仅是multiset多重集合容器同意将反复的元素键值插入.元素的搜索依旧具有对数级的算法时间复杂度,find和equal_range函数能够搜索出某一键值下的全部元素位置. 创建multiset对象 有下面几种方式. (1)    multiset() multiset<int> ms; (2)    multiset(constkey_compare&cmp) //student结构体 structstuden

第12章 multiset多重集合容器

/* 第12章 multiset多重集合容器 12.1 multiset技术原理 12.2 multiset应用基础 12.3 本章小结 */ // 第12章 multiset多重集合容器 // 12.1 multiset技术原理 ---------------------------------------------------------------------------- // 12.2 multiset应用基础 ------------------------------------

C++ Primer(第五版)学习笔记_7_标准模板库_multiset多重集合容器

C++ Primer(第五版)学习笔记_7_标准模板库_multiset多重集合容器 多重集合容器multiset与set一样,也是使用红黑树来组织元素数据的,唯一不用的是,multiset允许重复的元素键值插入.其结构示意图如下: 1.multiset元素插入 #include <iostream> #include <stdio.h> #include <vector> #include <set> #include <string> usi

stl之multiset容器的应用

与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,仅仅是multiset容器同意将反复的元素健值插入.而set容器则不同意. set容器所使用的C++标准头文件set.事实上也是multiset容器的头文件.由于这个set头文件也包括multiset所需的红黑树和自身实现文件.仅仅要用宏语句"#include<set>"包括进来,就可对multiset容器的应用代码进行编译. 创建multiset对象 与set容器一样,multiset容器提供例如

STL多重集合multiset

导语:今天看IOI2004的论文集,学到了一种集合函数,顺便把它记录下来,一位很牛的学长关于此集合写的很详细,可以参考他的博客链接click here~~ 例题:支付帐单: 题目描述 比尔最近遇到了一件麻烦事.每天上午,他会收到若干张帐单(也可能一张也没收到),每一张都有一定的面额.下午,他会从目前还没有支付的帐单中选出面额最大和最小的两张,并把它们付清.还没有支付的帐单会被保留到下一天.现在比尔已经知道他每天收到帐单的数量和面额,请你帮他给出支付的顺序. 约束条件 天数的上限为30,000,每

C++ STL set集合容器

汇总了一些set的常用语句,部分参考了这篇:http://blog.163.com/jackie_howe/blog/static/199491347201231691525484/ #include<set> 实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节 点的键值,小于右子树所有节点的键值:另外,还得保证根节点左子树的高度与右子树高度相等.平衡二叉检索树使用中序遍历算法,检索效率高于vector.

stl之set集合容器应用基础

set集合容器使用一种称为红黑树(Red-Black Tree) 的平衡二叉检索树的数据结构,来组织泛化的元素数据.每一个节点包括一个取值红色或黑色的颜色域.以利于进行树的平衡处理.作为节点键值的元素的插入,必须确保每一个子树根节点的键值大于左子树全部节点的键值,而小于右子树全部节点的键值.不会将反复的键值插入容器.也不须要指定详细的插入位置,而按元素在树中的关联关系,进行位置检索和插入.元素的删除亦然. 元素数据的检索.使用的是二叉检索树的中序遍历算法.检索的效率高于vector. deque

STL 里面的几个容器简叙

出处:http://blog.csdn.net/niushuai666/article/details/6654951 list1.list的成员函数push_back()把一个对象放到一个list的后面,而 push_front()把对象放到前面2.list容器不支持在iterator加一个数来指向隔一个的对象. 就是说,我们不能用Milkshakes.begin()+2来指向list中的第三个对象,因为STL的list是以双链的list来实现的, 它不支持随机存取.vector和deque(

STL模板_十大容器概念

一.向量(续)1.大小和容量大小:容器中元素的个数.容量:容器中可容纳元素的个数.size_type size (void) const; // 获取大小void resize (size_type num, value_type const& val = value_type ()); // 改变大小往小改,被裁减掉的元素将被析构.往大改,新增出来的元素将被构造,第二个参数表示初始值.void clear (void); // 清空,相当于resize (0)bool empty (void)