multiset容器的应用

与set集合容器一样,multiset多重集合容器也使用红黑树组织元素数据,只是multiset容器允许将重复的元素健值插入,而set容器则不允许。

set容器所使用的C++标准头文件set,其实也是multiset容器的头文件,因为这个set头文件也包含multiset所需的红黑树和自身实现文件,只要用宏语句“#include<set>”包含进来,就可对multiset容器的应用代码进行编译。

创建multiset对象

与set容器一样,multiset容器提供如下构造函数,创建multiset对象来管理内部红黑树中的节点元素数据。

1.  set(); 用默认的 less<T>函数对象和内存分配器,创建一个没有任何数据元素的 set对象。

2.  set(constkey_compare& comp); 指定一个比较函数对象comp 来创建 set 对象,内存分配器为默认值。

3.  set(constset&);  set拷贝构造函数,通过红黑树的拷贝构造函数,实现两个set容器的元素、头节点和节点个数的拷贝。

4.  set(InputIteratorfirst, InputIteratorlast); 用迭代器区间 [first, last)所指的元素,创建一个 set对象。

5.  set(InputIteratorfirst,InputIterator last, const key_compare& comp);//用迭代器区间 [first, last)所指的元素和comp函数对象,创建一个 set对象。

#include <iostream>
#include <set>
using namespace std;

bool fncomp (int lhs, int rhs) {return lhs<rhs;}

struct classcomp
{
	bool operator() (const int& lhs, const int& rhs) const
	{return lhs<rhs;}
};
//5种创建multiset对象的方式
int main ()
{
	multiset<int> first;
	int myints[]= {10,20,30,20,20};
	multiset<int> second (myints,myints+5);
	multiset<int> third (second);
	multiset<int> fourth (second.begin(), second.end());
	multiset<int,classcomp> fifth;
	return 0;
}

元素的插入和删除及搜索

multiset容器元素的插入和删除、搜索与set容器一致,具体可以参考上篇set容器的应用

其他函数

count(); 返回指向某个值元素的个数

#include <iostream>
#include <set>
using namespace std;
int main ()
{
       intmyints[]={10,73,12,22,73,73,12};
       multiset<int>mymultiset (myints,myints+7);
       cout<< "73 appears " << mymultiset.count(73) << "times in mymultiset.\n";
       return0;
}

empty(); 如果集合为空,返回true

equal_range(); 返回集合中与给定值相等的上下限的两个迭代器

find(); 返回一个指向被查找到元素的迭代器

get_allocator(); 返回多元集合的分配器

#include <iostream>
#include <set>
using namespace std;
int main ()
{
       multiset<int>mymultiset;
       int* p;
       unsignedint i;
       //用get_allocator申请含义个元素的内存空间
       p=mymultiset.get_allocator().allocate(5);
       //对内存空间进行赋值
       for(i=0; i<5; i++) p[i]=(i+1)*10;
       cout<< "所申请的数组空间包含元素::";
       for(i=0; i<5; i++)
              cout<< ' ' << p[i];
       cout<< '\n';
       //施放内存空间
       mymultiset.get_allocator().deallocate(p,5);
       return0;
}

key_comp(); 返回一个用于元素间值比较的函数,默认<

#include <iostream>
#include <set>
using namespace std;
int main ()
{
       multiset<int>mymultiset;
       for(int i=0; i<5; i++)
           mymultiset.insert(i);
       multiset<int>::key_comparemycomp = mymultiset.key_comp();
       cout<< "mymultiset contains:";
       inthighest = *mymultiset.rbegin();
       multiset<int>::iteratorit = mymultiset.begin();
       do{
              std::cout<< ' ' << *it;
       }while ( mycomp(*it++,highest) );
       cout<< '\n';
       return0;
}

lower_bound(); 返回指向大于(或等于)某值的第一个元素的迭代器

max_size(); 返回集合能容纳的元素的最大限值

size(); 多元集合中元素的数目

swap(); 交换两个多元集合变量

upper_bound(); 返回一个大于某个值元素的迭代器

value_comp(); 返回一个用于比较元素间的值的函数

转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/46754979,谢谢合作!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 20:14:24

multiset容器的应用的相关文章

第十三篇:multimap容器和multiset容器中的find操作

前言 multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值.对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器.那么对于multimap容器来说,find函数将如何运作呢?如果要实现和map容器的find函数同样的功能,则它将返回多个迭代器,这样太复杂了.本文将讲解C++中multimap容器的“ find实现 ”. 解决思路一 摒弃find函数,使用另外两个新函数,它们是专家们为了解决multimap中的“ find操作 ”问题专门设计的: 1. lo

set和multiset容器的能力

1 set和multiset容器的能力 set 和multiset容器的内部结构通常由平衡二叉树(balancedbinary tree)来实现.当元素放入容器中时,会按照一定的排序法则自动排序,默认是按照less<>排序规则来排序.这种自动排序的特性加速了元素查找的过程,但是也带来了一个问题:不可以直接修改set或multiset容器中的元素值,因为这样做就可能违反了元素自动排序的规则.如果你希望修改一个元素的值,必须先删除原有的元素,再插入新的元素. 2 set和multiset容器的操作

set,multiset容器类型

set和multiset会根据特定的排序准则,自动将元素排序.两者不同处在于multiset允许元素重复而set不允许. 一.集和多集(set 和multiset 容器类) 在使用set和multiset之前,先必须包含头文件<set>#include < set>在其中,set和multiset被定义为命名空间std内的class template: 1 namespace std { 2 template<class T, 3 <class Compare = le

stl之multiset容器的应用

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

multiset容器erase函数的误用

<从缺陷中学习C/C++>第3章库函数问题,本章主要介绍库函数的使用中会遇到的问题.使用库函数可以降低软件开发的难度,提高代码编写的效率.本节为大家介绍multiset容器erase函数的误用. AD: 51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验 3.16  multiset容器erase函数的误用 代码示例 int main(){ multiset <int> c1; c1.insert(3); c1.insert(2); c1.insert(3); c

C++(四十九) — set、multiset 容器的基本操作

 1.set set的特性是:所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值.set不允许两个元素有相同的键值. set的各成员函数列表如下: 1. begin():返回指向第一个元素的迭代器:end():返回指向最后一个元素的迭代器: 2.empty():如果集合为空,返回true:clear():清除所有元素; 3. erase():删除集合中的元素 erase(iterator) :删除定

STL - set和multiset

set/multiset的简介 set是一个集合容器,其中所包含的元素是唯一的,集合中的元素按一定的顺序排列.元素插入过程是按排序规则插入,所以不能指定插入位置. set采用红黑树变体的数据结构实现,红黑树属于平衡二叉树.在插入操作和删除操作上比vector快. set不可以直接存取元素.(不可以使用at.(pos)与[]操作符). multiset与set的区别:set支持唯一键值,每个元素值只能出现一次:而multiset中同一值可以出现多次. 不可以直接修改set或multiset容器中的

C++拾遗(七)——关联容器

关联容器(Associative containers)支持通过键来高效地查找和读取元素.两个基本的关联容器类型是 map 和set.map 的元素以键-值(key-value)对的形式组织:键用作元素在 map 中的索引,而值则表示所存储和读取的数据.set仅包含一个键,并有效地支持关于某个键是否存在的查询.set 和 map 类型的对象所包含的元素都具有不同的键,不允许为同一个键添加第二个元素.如果一个键必须对应多个实例,则需使用 multimap 或 multiset,这两种类型允许多个元

2_STL容器

STL算法的精髓在于  算法的  返回值!!! String: string是STL的字符串类型,通常用来表示字符串:C语言中一般用char* char*字符指针;string是类封装了char*,管理这个字符串,是一个char*型的容器: string不用考虑内存释放和越界,string管理char*所分配的内存. string提供了一系列字符串操作函数(find,copy,erase,replace,insert)初始化 : string s1 = "abcd"; //重载oper