您好,欢迎来到九壹网。
搜索
您的当前位置:首页C++ 中的multiset容器

C++ 中的multiset容器

来源:九壹网
o tenk.内容提要:在标准模板库(STL)中提供了很多的容器,它们是存储对象的对象。本文主要介绍STL中的关联容器——multiset容器,内容包括multiset::begin、multiset::clear、multiset::count、multiset::empty等26种函数。本容器是以模板的形式设计的,能应用于广泛的数据类型。

关键字:begin、clear、count 、empty、end、find、insert

引言:multiset是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的每个元素的值不必惟一(即可以取相同的值),而且系统会根据该值来自动将数据排序。每个元素的值不能直接被改变。

正文:

bnc.wwwC++ 中的multiset容器

ww wbnc.kookoote.n1 multiset容器

.coobnc.wwwmultiset容器简介:

multiset是一个容器,它用于储存数据并且能从一个数据集合中取出数据。它的每个元素的值不必惟一(即可以取相同的值),而且系统会根据该值来自动将数据排序。每个元素的值不能直接被改变。

需加载的头文件: #include

using namespace std; 模板原型: template < class Key, class Compare=less, class Allocator=allocator >

说明:

表1为参数说明。

tenk. oobnnk. et bnc.wwwkoote.n参数 Key

Compare

multiset容器有以下特点:

(1)它是一个相关联的容器,它的大小可以改变,它能根据关键字值来提高读取数据的能力。 (2)它提供一个双向的定位器来读写取数据。

(3)它已经根据关键字和一个比较函数来排好序。

(4)它的每一个元素的关键字不是惟一的,它们可以相同,因此同一个值可能有很多个元素与它对应。

(5)它是一个简单的容器,因为它的元素值就是它的关键字。

(6)它是一个模板类,因为它提供一个一般且具有性的容器。 成员变量:

表2为multiset的成员变量说明。

wwwallocator

oobnc.含义

存储在multiset容器中的关键字的数据类型

它能提供比较两个元素的函数来决定它们在multiset容器中的相对位置

它是可选的,它的默认值是less

它代表存储管理设备。它是可选的,它的默认值为allocator

tenk.表1 multiset的参数说明

bnc.wwww wkoote.nncw.koobwwc.woobnenk. t※ 1 ※

ooenk. tw wcw.o tenk. allocator_type

const_iterator

bnc.www成员变量

koo功能说明

表2 multiset的成员变量说明

对象分配器

提供一个双向的定位器,它能读取multiset中的一个常元

它能提供一个常元的指针 一个常元的地址

提供一个双向的定位器,使得能够在multiset容器中读取任意一个常值元素

它提供multiset容器中由定位器所指定的范围内的元素的个数

提供一个双向入口定位器,使得能够在multiset中读取或者修改元素

const_pointer const_reference

const_reverse_iterator difference_type iterator

.coobntenk.key_compare

key_type pointer reference

reverse_iterator size_type value_type

ww wbnc.koote.n

下面介绍multiset的成员函数。

它是提供一个两个元素的关键字的次序关系的函数 它描述每一个元素的关键字

提供一个指向multiset中的某元素的指针 提供在multiset容器中的一个常元的地址

在反向的multiset容器中提供一个双向的入口定位器,使得能够在读取或者修改元素 multiset容器中元素个数 存储的数据类型

1.1 multiset::begin

c.www功能:

返回第一个元素的定位器(iterator)的地址。 语法:

const_iterator begin() const; iterator begin(); 说明:

当返回第一个元素的地址值为一个常值定位器(_iterator),则multiset不会被修改。 当返回第一个元素的地址值为一个定位器(iterator),则multiset可被修改。 函数返回值:

返回一个指向第一个元素的双向定位器地址。 示例:

/*************************************************** 程序编号:1

程序功能说明:用begin定位到ctr的开始位置,并打印出该元素。 ***************************************************/ #include

#include int main() {

using namespace std; multiset ctr; multiset ::iterator cp; ctr.insert('a'); ctr.insert('b');

oobnnk. et bnc.wwwkoote.nte.nwwwoobnc. tenk. bnc.wwww wkooncw.koobwwc.woobnenk. t※ 2 ※

ooenk. tw wcw.o tenk. cp=ctr.begin(); //定位到ctr的开始位置

cout<<\"The first element is:\"<<*cp<return 0; }

运行结果:

运行结果如图1所示。

bnc.wwwkookoote.nte.nte.n.coobn1.2 multiset::clear

功能:

将一个multiset容器的全部元素删除。 语法:

void clear(); 说明:

clear会删除multiset容器的全部元素。 函数返回值: 无。 示例:

tenk. ww wbnc.图1 程序运行结果

c.www{

/***************************************************

程序编号:2

oobnnk. et bnc.www

koo程序功能说明:先创建一个multiset容器,再用clear函数清空,最后打印是否为空的信息。

***************************************************/ #include #include

int main()

using namespace std; multiset ctr; ctr.insert('a'); ctr.insert('b'); ctr.insert('c'); ctr.clear();

wwwoobnc. tenk. bnc.wwww wkooncw.koob//清空multiset容器

if(ctr.empty()) //multiset容器为空时 cout<<\"The container is empty\"<else //multiset容器为非空时

cout<<\"The container is not empty\"<wwc.woobnenk. t※ 3 ※

ooenk. tw wcw.o tenk.}

运行结果:

运行结果如图2所示。

bnc.wwwkookoote.nte.nte.n1.3 multiset::count

.coobn功能:

返回对应某个关键字的元素的个数。 语法:

size_type count( const Key& _Key ) const; 说明:

_Key 是要进行匹配的关键字的值。 函数返回值:

返回关键字为_Key的元素的个数。 示例:

tenk. ww w图2 程序运行结果

bnc.

/*************************************************** 程序编号:3

c.www{

程序功能说明:先创建一个multiset容器,再用count函数来求出关键字为1的元素的个数。 ***************************************************/ #include #include int main()

oobnnk. et bnc.wwwkoo using namespace std; multiset ctr; ctr.insert('a'); ctr.insert('b'); ctr.insert('a'); int i;

i=ctr.count('a'); if(i==0) }

运行结果: else return 0;

wwwoobnc. tenk. bnc.wwww wkooncw.koob//求出关键字为字符'a'的元素的个数

cout<<\"There is no such key!\"<cout<<\"The number of key is:\"<wwc.woobnenk. t※ 4 ※

ooenk. tw wcw.运行结果如图3所示。

o tenk. bnc.wwwkookoo

te.nte.n图3 程序运行结果

1.4 multiset::empty

.coobnc.www功能:

测试一个multiset容器是否为空。 语法:

bool empty() const; 说明:

empty函数用于测试一个multiset容器是否为空。 函数返回值:

当容器multiset为空时,返回true,否则返回false。 示例:

/*************************************************** 程序编号:4

程序功能说明:先创建一个multiset容器,再用clear函数清空,最后打印是否为空的信息。 ***************************************************/ #include

#include int main() {

using namespace std; multiset ctr; if(ctr.empty()) //multiset容器为空时 cout<<\"The container is empty\"<运行结果:

运行结果如图4所示。

tenk. ww wbnc.oobnnk. et bnc.wwwkoowwwoobnc. tenk. bnc.wwww wkoote.nncw.koob1.5 multiset::end

功能:

返回最后一个元素后面的定位器(iterator)的地址。

※ 5 ※

wwc.woobnenk.

t图4 程序运行结果

ooenk. tw wcw.o tenk..coobnc.www语法:

const_iterator end() const; iterator end(); 说明:

end函数用于测试一个定位器是否已达到它的尾部。 函数返回值:

返回一个指向最后一个元素后面的双向定位器地址。当multiset容器为空时,结果没定义。 示例:

/*************************************************** 程序编号:5

程序功能说明:先初始化一个multiset,再打印其中的内容,最后显示出最后一个元素的值。 ***************************************************/ #include

#include using namespace std;

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; multiset ::const_iterator cp; int i;

for(i=0;i<3;i++)ctr.insert(i); //给ctr赋值 cout<<\"The ctr is: \";

print(ctr); //调用子程序来打印ctr的内容 cout<cp=ctr.end();//让cp指向最后一个元素的位置 cp--;

cout<<*cp<运行结果:

运行结果如图5所示。

bnc.wwwkookoote.ntenk. ww wbnc.oobnnk. et bnc.wwwkoote.nwwwoobnc. tenk. bnc.wwww wkoote.nncw.koobwwc.woobnenk. t

图5 程序运行结果

※ 6 ※

ooenk. tw wcw.1.6 multiset::equal_range

o tenk..coobnc.www功能:

返回一对定位器,它们分别指向第一个大于或等于给定的关键字的元素和第一个比给定的关键字大的元素。

语法:

pair equal_range ( const Key& _Key ) const;

pair equal_range ( const Key& _Key ) const; 说明:

_Key 是一个用于排序的关键字。 函数返回值:

返回一对定位器。

要从第一个定位器中取得数据,可用pr.first。 从第二个定位器中取得数据,则用pr.second。 示例:

/*************************************************** 程序编号:6

程序功能说明:先初始化一个multiset,再打印其中的内容,最后打印出关键字>=2和>2的元素。

***************************************************/ #include

#include using namespace std;

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; pair ::const_iterator, multiset ::const_iterator> p; int i;

for(i=0;i<=3;i++)ctr.insert(i); //给ctr赋值 cout<<\"The ctr is: \";

print(ctr); //调用子程序来打印ctr的内容 cout<※ 7 ※

bnc.wwwkookoote.ntenk. ww wbnc.oobnnk. et bnc.wwwkoote.nwwwoobnc. tenk. bnc.wwww wkoote.nncw.koobwwc.woobnenk. tooenk. tw wcw.o tenk..coobn p=ctr.equal_range(2); if(p.first!=ctr.end()) { cout<<\"The first element which key >= 2 is: \"; cout<<*p.first; //调用子程序来打印一项 cout<if(p.second!=ctr.end()) { cout<<\"The first element which key > 2 is: \"; cout<<*p.second; cout<return 0; }

运行结果:

运行结果如图6所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.1.7 multiset::erase

c.www功能:

将一个或一定范围的元素删除。 语法:

iterator erase( iterator _Where );

iterator erase( iterator _First, iterator _Last );

size_type erase( const key_type& _Key ); 说明:

表3为erase的参数说明。

oobnnk. et bnc.www

koo图6 程序运行结果

wwwoobnc.参数 _Where

_First _Last _Key

tenk. bnc.wwww wkooncw.koob

注意:它不会抛出任何的exception。

※ 8 ※

wwc.w表示要删除的元素的位置

第一个被删除的元素的位置 第一个不被删除的元素的位置

从multiset容器中删除的元素的关键字的值

oobn表3 erase的参数说明

含义

enk. tooenk. tw wcw.o tenk..coobn函数返回值:

前两个函数返回一个指向第一个没被删除的元素的双向定位器,如果不存在这样的元素,则返回multiset容器的末尾。

第三个函数返回被删除的元素的个数。 示例:

/*************************************************** 程序编号:7

程序功能说明:用erase函数将ctr的第二个元素删除。 ***************************************************/ #include

#include using namespace std; #define len 5

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; multiset ::iterator cp;

bnc.wwwkookoote.ntenk. ww wbnc.

c.www int i;

for(i=0;icout<<\"ctr is:\"; print(ctr); //调用子程序,把ctr打印出来 cout<cout<<\"After erase the second element ctr is:\"; cp=ctr.begin(); cp++;

ctr.erase(cp); //擦除ctr的cp位置的元素 print(ctr); //调用子程序,把ctr打印出来 cout<运行结果:

运行结果如图7所示。

oobnnk. et bnc.wwwkoote.nwwwoobnc. tenk. bnc.wwww wkoote.nncw.koobwwc.woobnenk. t

图7 程序运行结果

※ 9 ※

ooenk. tw wcw.1.8 multiset::find

o tenk..coobnc.www功能:

求出与给定的关键字相等的元素的定位器。 语法:

iterator find( const Key& _Key );

const_iterator find( const Key& _Key ) const; 说明:

_Key 是要进行搜索的关键字的值。

该函数会返回一个指向关键字为_Key的元素的定位器

当返回的第一个元素的地址值为一个常值定位器(_iterator),则multiset可通过它不会被修改。 当返回的第一个元素的地址值为一个定位器(iterator),则multiset可通过它被修改。 函数返回值:

找到该元素时,返回一个指向关键字为_Key的元素的定位器,否则返回一个指向multiset容器的结束的定位器。

示例:

/*************************************************** 程序编号:8

程序功能说明:用将key=2的元素打印出来。

***************************************************/ #include

#include using namespace std; #define len 5

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; multiset ::iterator cp; int i;

for(i=0;i※ 10 ※

bnc.wwwkookoote.ntenk. ww wbnc.oobnnk. et bnc.wwwkoote.nwwwoobnc. tenk. bnc.wwww wkoote.nncw.koobwwc.woobnenk. tooenk. tw wcw.o tenk.

cp=ctr.find(2); //查找key=2的元素 if(cp!=ctr.end()) //找到时,打印出来 { cout<<\"The element whose key = 2 is:\"; cout<<*cp; cout<运行结果:

运行结果如图8所示。

bnc.wwwkookoote.nte.nte.n.coobntenk. ww wbnc.1.9 multiset::get_allocator

c.www功能:

返回构造该multiset容器的allocator的一个副本。 语法:

Allocator get_allocator() const; 说明:

容器multiset的allocator指明一个类的存储管理。默认的allocator能提供STL容器高效的运行。 函数返回值:

该容器的allocator。 示例:

/*************************************************** 程序编号:9

程序功能说明:用ctr的allocator来创建ctr2。

***************************************************/ #include

#include using namespace std;

int main() {

multiset ctr; ctr.insert('a'); multiset ctr2(less(),ctr.get_allocator()); cout<<\"ctr2's size is: \"<※ 11 ※

oobnnk. et bnc.www

koo图8 程序运行结果

wwwoobnc. tenk. bnc.wwww wkooncw.koobwwc.woobnenk. tooenk. tw wcw.o tenk. return 0; }

运行结果:

运行结果如图9所示。

bnc.wwwkookoo

te.nte.nte.n1.10 multiset::insert

.coobnc.www

功能:

将一个元素或者一定数量的元素插入到multiset的特定位置中。 语法:

pair insert( const value_type& _Val );

iterator insert( iterator _Where, const value_type& _Val );

template void insert(

InputIterator _First, InputIterator _Last ); 说明:

表4为insert的参数说明。

tenk. ww wbnc.图9 程序运行结果

oobnnk. et bnc.wwwkoo如果能在_Where后面迅速地插入,那么只要很短的时间。

第三个成员函数将范围为[ _First,_Last ]中的元素插入。 函数返回值:

第一个函数返回一对值,当插入成功时,bool=true,当要插入的元素的关键字与已有的参数的值相同,则bool=false,而iterator指向插入的位置或者已存在的元素的位置。

第二个函数返回指向插入的位置的定位器。 示例:

/*************************************************** 程序编号:10

程序功能说明:利用insert函数给ctr赋值。

***************************************************/

※ 12 ※

wwwoobnc.参数 _Where

_Val _First _Last

第一个被插入到multiset的元素的位置 插入的参数的值

第一个被插入的位置 第一个不被插入的位置

tenk. bnc.wwww wkoo表4 insert的参数说明

含义

ncw.koobwwc.woobnenk. tooenk. tw wcw.o tenk..coobnc.www#include

#include using namespace std; #define len 5

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; multiset ::iterator cp; int i;

for(i=0;i运行结果:

运行结果如图10所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.oobnnk. et bnc.wwwkoo1.11 multiset::key_comp

功能:

取得一个比较对象的副本来对multiset容器中的元素进行排序。 语法:

key_compare key_comp() const; 说明:

存储对象定义了一个成员函数:

bool operator(const Key& _Left, const Key& _Right);

当_Left严格在_Right的前面时,返回true,否则返回false。 函数返回值:

取得一个对multiset容器中的元素进行排序的比较对象。 示例:

/***************************************************

wwwoobnc. tenk. bnc.www

koo图10 程序运行结果

wwc.woobnenk. tw wncw.koob※ 13 ※

ooenk. tw wcw.o tenk..coobn程序编号:11

程序功能说明:先取得一个key_compare对象,再用此对象来比较1和2。 ***************************************************/ #include

#include using namespace std; int main() {

multiset ctr; multiset >::key_compare kc = ctr.key_comp() ; if(kc( 1, 2 )) {

cout<<\"kc(1,2) is true\"<else {

cout<<\"kc(1,2) is false\"<return 0; }

运行结果:

运行结果如图11所示。

bnc.wwwkookoote.ntenk. ww wbnc.c.wwwoobnnk. et bnc.wwwkoote.nte.n1.12 multiset::lower_bound

功能:

求出指向第一个关键字的值是大于等于一个给定值的元素的定位器。 语法:

iterator lower_bound( const Key& _Key );

const_iterator lower_bound( const Key& _Key ) const; 说明:

_Key 是一个用于排序的关键字。 函数返回值:

返回一个指向第一个关键字的值是大于等于一个给定值的元素的定位器,或者返回指向multiset容器的结束的定位器。

wwwoobnc. tenk. bnc.www

koo图11 程序运行结果

wwc.woobnenk. tw wncw.koob※ 14 ※

ooenk. tw wcw.o tenk..coobnc.www示例:

/*************************************************** 程序编号:12

程序功能说明:先初始化一个multiset,再打印其中的内容,最后将关键字大于等于2的元素打印出来。

***************************************************/ #include

#include using namespace std;

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; multiset ::const_iterator cp; int i;

for(i=0;i<=3;i++)ctr.insert(i,i); //给ctr赋值 cout<<\"The ctr is: \"; print(ctr); //调用子程序来打印ctr的内容 cout<cp=ctr.lower_bound(2); if(cp!=ctr.end()) { cout<<\"The first element which key >= 2 is: \"; cout<<*cp; //调用子程序来打印一项 cout<return 0; }

运行结果:

运行结果如图12所示。

bnc.wwwkookoote.ntenk. ww wbnc.oobnnk. et bnc.wwwkoote.nwwwoobnc. tenk. bnc.wwww wkoote.nncw.koobwwc.woobnenk. t图12 程序运行结果

※ 15 ※

ooenk.

tw wcw.1.13 multiset::max_size

o tenk..coobnc.www功能:

计算multiset容器的最大长度。 语法:

size_type max_size() const; 说明:

max_size会返回multiset容器的最大长度。 函数返回值:

返回multiset容器可能的最大长度。 示例:

/*************************************************** 程序编号:13

程序功能说明:求出一个multiset容器的可能最大的长度。 ***************************************************/ #include

#include using namespace std; #define len 5 int main() {

multiset ctr; multiset ::size_type st; int i;

for(i=0;i运行结果:

运行结果如图13所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.oobnnk. et bnc.wwwkoowwwoobnc. tenk. bnc.wwww wkooncw.koob图13 程序运行结果

1.14 multiset::multiset

功能:

multiset的构造函数。 语法:

multiset();

explicit multiset ( const Compare& _Comp

wwc.woobnenk. t

※ 16 ※

ooenk. tw wcw.o tenk..coobnc.www

);

explicit multiset ( const Compare& _Comp, const Allocator& _Al ); set( const _ multiset & _Right );

template multiset (

InputIterator _First, InputIterator _Last );

template multiset (

InputIterator _First, InputIterator _Last, const Compare& _Comp );

template multiset (

InputIterator _First, InputIterator _Last, const Compare& _Comp, const Allocator& _Al ); 说明:

表5为multiset函数的参数说明。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.oobnnk.参数

et bnc.wwwkoo所有的构造函数都存储一个分配器和初始化multiset容器。

所有的构造函数都存储一个Traits类型的函数对象,它用于对multiset容器的元素进行排序。 头三个构造函数创建一个空的初始multiset容器。 第四个构造函数创建一个_Right容器的副本。

后三个构造函数拷贝在范围_First~_Last内的一个multiset容器。 函数返回值: 无。 示例:

/*************************************************** 程序编号:14

程序功能说明:先定义一个ctr1的multiset容器,再构造一个与ctr1相同的容器。

wwwoobnc._Al

_Comp _Right _First _Last 一个分配器类

一个用于比较的函数,它的默认值为compare 一个multiset的拷贝

被拷贝的第一个元素的位置 不被拷贝的第一个元素的位置

tenk.表5 multiset函数的参数说明

含义

bnc.wwww wkooncw.koobwwc.woobnenk. t※ 17 ※

ooenk. tw wcw.o tenk..coobnc.www***************************************************/ #include

#include using namespace std;

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr1; //创建一个有两个字母为'a'的multiset int i;

for(i=0;i<=3;i++)ctr1.insert(i); //给ctr1赋值 multiset ctr2(ctr1); //创建一个以ctr1相同的multiset容器 cout<<\"The ctr2 is: \"; print(ctr2); //打印ctr2的内容 cout<运行结果:

运行结果如图14所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.oobnnk. et bnc.wwwkoo1.15 multiset::operator!=

功能:

测试左边的multiset容器与右边是否相同。 语法:

bool operator!=( const multiset & _Left, const multiset & _Right ); 说明:

_Left和_Right是待比较的两个multiset容器。

wwwoobnc. tenk. bnc.wwww wkoo

图14 程序运行结果

ncw.koobwwc.woobnenk. t※ 18 ※

ooenk. tw wcw.o tenk..coobnc.www两个multiset容器相等当且仅当它们的元素个数相等且同一个位置上的值相等。 函数返回值:

当_Left和_Right不同时,返回True,否则返回False。 示例:

/*************************************************** 程序编号:15

程序功能说明:比较两个multiset容器是否相等。

***************************************************/ #include

#include int main() {

using namespace std; multiset ctr1,ctr2; int i;

for(i=0;i<3;i++) {

ctr1.insert('a'+i); ctr2.insert('A'+i); }

if(ctr1!=ctr2) //当ctr1与ct2不同时 cout<<\"They are not equal\"<运行结果如图15所示。

bnc.wwwkookoote.ntenk. ww wbnc.oobnnk. et bnc.wwwkoote.nte.n1.16 multiset::operator<

功能:

测试左边的multiset容器是否小于右边。 语法:

bool operator==( const multiset & _Left, const multiset & _Right ); 说明:

_Left和_Right是待比较的两个multiset容器。

两个multiset容器的大小比较是基于第一个不相同的元素的大小比较。

wwwoobnc. tenk. bnc.www

koo图15 程序运行结果

wwc.woobnenk. tw wncw.koob※ 19 ※

ooenk. tw wcw.o tenk..coobnc.www函数返回值:

当_Left<_Right时,返回True,否则返回False。 示例:

/*************************************************** 程序编号:16

程序功能说明:比较ctr1与ctr2的大小。

***************************************************/ #include

#include int main() {

using namespace std; multiset ctr1,ctr2; int i;

for(i=0;i<3;i++) //下面给ctr1和ctr2赋值 {

ctr1.insert('a'+i); ctr2.insert('A'+i); }

if(ctr1cout<<\"ctr1cout<<\"ctr1>=ctr2\"<运行结果:

运行结果如图16所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.oobnnk. et bnc.wwwkoo1.17 multiset::operator<=

功能:

测试左边的multiset容器是否小于或等于右边。 语法:

bool operator<( const multiset & _Left, const multiset & _Right ); 说明:

_Left和_Right是待比较的两个multiset容器。

两个multiset容器的大小比较是基于第一个不相同的元素的大小比较。

wwwoobnc. tenk. bnc.www

koo图16 程序运行结果

wwc.woobnenk. tw wncw.koob※ 20 ※

ooenk. tw wcw.o tenk..coobnc.www函数返回值:

当_Left<=_Right时,返回True,否则返回False。 示例:

/*************************************************** 程序编号:17

程序功能说明:比较ctr1与ctr2的大小。

***************************************************/ #include

#include int main() {

using namespace std; multiset ctr1,ctr2; int i;

for(i=0;i<3;i++) {

ctr1.insert('a'+i); ctr2.insert('A'+i); }

if(ctr1<=ctr2)

cout<<\"ctr1<=ctr2\"<cout<<\"ctr1>ctr2\"<运行结果:

运行结果如图17所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.oobnnk. et bnc.wwwkoo1.18 multiset::operator==

功能:

测试左边的multiset容器与右边是否相同 语法:

bool operator==( const multiset & _Left, const multiset & _Right ); 说明:

_Left和_Right是待比较的两个multiset容器。

两个multiset容器相等,当且仅当它们的元素个数相等,且同一个位置上的值相等。

wwwoobnc. tenk. bnc.www

koo图17 程序运行结果

wwc.woobnenk. tw wncw.koob※ 21 ※

ooenk. tw wcw.o tenk..coobnc.www函数返回值:

当_Left和_Right相同时,返回True,否则返回False。 示例:

/*************************************************** 程序编号:18

程序功能说明:比较两个数是否相等。

***************************************************/ #include

#include int main() {

using namespace std; multiset ctr1,ctr2; int i;

for(i=0;i<3;i++) {

ctr1.insert('a'+i); ctr2.insert('A'+i); }

if(ctr1==ctr2) //当ctr1与ctr2相同时 cout<<\"They are equal\"<运行结果:

运行结果如图18所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.oobnnk. et bnc.wwwkoo1.19 multiset::operator>

功能:

测试左边的multiset容器是否大于右边。 语法:

bool operator>( const multiset & _Left, const multiset & _Right )

说明:

_Left和_Right是待比较的两个multiset容器。

两个multiset容器的大小比较是基于第一个不相同的元素的大小比较。 函数返回值:

当_Left>_Right时,返回True,否则返回False。

wwwoobnc. tenk.

bnc.wwww wkoo图18 程序运行结果

ncw.koobwwc.woobnenk. t※ 22 ※

ooenk. tw wcw.o tenk..coobn示例:

/*************************************************** 程序编号:19

程序功能说明:比较ctr1与ctr2的大小。

***************************************************/ #include

#include int main() {

using namespace std; multiset ctr1,ctr2; int i;

for(i=0;i<3;i++) {

ctr1.insert((i,'a'+i)); ctr2.insert((i,'A'+i)); }

if(ctr1>ctr2)

cout<<\"ctr1>ctr2\"<cout<<\"ctr1<=ctr2\"<运行结果:

运行结果如图19所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.c.wwwoobnnk. et bnc.wwwkoo1.20 multiset::operator>=

功能:

测试左边的multiset容器是否大于或等于右边。 语法:

bool operator>=( const multiset & _Left, const multiset & _Right ); 说明:

_Left和_Right是待比较的两个multiset容器。

两个multiset容器的大小比较是基于第一个不相同的元素的大小比较。 函数返回值:

当_Left>=_Right时,返回True,否则返回False。

wwwoobnc. tenk. bnc.www

koo图19 程序运行结果

wwc.woobnenk. tw wncw.koob※ 23 ※

ooenk. tw wcw.o tenk..coobn示例:

/*************************************************** 程序编号:20

程序功能说明:比较ctr1与ctr2的大小。

***************************************************/ #include

#include int main() {

using namespace std; multiset ctr1,ctr2; int i;

for(i=0;i<3;i++) {

ctr1.insert('a'+i); ctr2.insert('A'+i); }

if(ctr1>=ctr2)

cout<<\"ctr1>=ctr2\"<cout<<\"ctr1运行结果:

运行结果如图20所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.c.wwwoobnnk. et bnc.wwwkoo1.21 multiset::rbegin

功能:

返回一个指向反向multiset容器的第一个元素的定位器。 语法:

const_reverse_iterator rbegin() const; reverse_iterator rbegin(); 说明:

rbegin与反向multiset容器一起使用,它的作用与multiset容器中的begin一样。 当返回值为一个const _reverse _iterator,则multiset容器不会被修改。 当返回值为一个reverse _iterator,则multiset容器可被修改。 函数返回值:

返回一个指向反向multiset容器的第一个元素的反向双向定位器。 示例:

/***************************************************

wwwoobnc. tenk.

bnc.wwww wkoo图20 程序运行结果

ncw.koobwwc.woobnenk. t※ 24 ※

ooenk. tw wcw.o tenk..coobnc.www程序编号:21

程序功能说明:打印出正向和反向的multiset容器。

***************************************************/ #include

#include #define len 5

using namespace std;

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; multiset ::iterator cp; multiset ::reverse_iterator rcp; int i;

for(i=0;icout<<\"Its reverse is:\";

for(rcp=ctr.rbegin();rcp!=ctr.rend();rcp++) //打印出反向multiset容器 cout<<*rcp<<\" \"; cout<运行结果:

运行结果如图21所示。

bnc.wwwkookoote.ntenk. ww wbnc.oobnnk. et bnc.wwwkoote.nte.nwwwoobnc. tenk. bnc.wwww wkooncw.koob1.22 multiset::rend

功能:

返回一个指向反向multiset容器的最后元素后面的定位器。

※ 25 ※

wwc.woobnenk. t

图21 程序运行结果

ooenk. tw wcw.o tenk.语法:

const_reverse_iterator rend() const; reverse_iterator rend(); 说明:

rend与反向multiset容器一起使用,它的作用与multiset容器中的end一样。 当返回值为一个const _reverse _iterator,则multiset不会被修改。 当返回值为一个reverse _iterator,则multiset可被修改。 函数返回值:

返回一个指向反向multiset容器中的最后一个元素后面的反向双向定位器。 示例:

bnc.wwwkookoote.n/***************************************************

程序编号:22

程序功能说明:打印出正向和反向的multiset容器。 ***************************************************/

nc.oob#include

#include using namespace std;

tenk. ww wbnc.#define len 5

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \";

c.www} {

return 0;

int main()

oobnnk. et bnc.wwwkoote.nte.n multiset ctr;

multiset ::iterator cp;

multiset ::reverse_iterator rcp; int i;

for(i=0;icout<<*rcp<<\" \";

wwwoobnc. tenk. bnc.wwww wkooncw.koob//调用子程序,把ctr打印出来

for(rcp=ctr.rbegin();rcp!=ctr.rend();rcp++) //打印出反向multiset容器 cout<运行结果:

wwc.woobnenk. t※ 26 ※

ooenk. tw wcw.运行结果如图22所示。

o tenk. bnc.wwwkookoo

te.nte.nte.n图22 程序运行结果

1.23 multiset::size

.coobn功能:

计算multiset容器元素的个数。 语法:

size_type size() const; 说明:

size函数会计算出multiset容器元素的个数。 函数返回值:

当前multiset容器的长度。 示例:

tenk. ww wbnc.c.www/***************************************************

程序编号:23

程序功能说明:求出multiset容器的长度。

***************************************************/ #include

#include using namespace std; #define len 5 int main() {

multiset ctr; int i;

for(i=0;i运行结果:

运行结果如图23所示。

oobnnk. et bnc.wwwkoowwwoobnc. tenk. bnc.wwww wkooncw.koob1.24 multiset::swap

功能:

交换两个multiset容器的元素。

wwc.woobnenk. t

图23 程序运行结果

※ 27 ※

ooenk. tw wcw.o tenk..coobnc.www语法:

void swap( multiset& _Right ); 说明:

_Right是与目标容器交换元素的multiset容器。 函数返回值: 无。 示例:

/*************************************************** 程序编号:24

程序功能说明:让ctr1与ctr2交换。

***************************************************/ #include

#include

using namespace std;

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr1, ctr2; multiset ::const_iterator cp; int i;

for(i=0;i<3;i++) //下面先给ctr1和ctr2赋值 {

ctr1.insert(i);

ctr2.insert(i+10); }

cout<<\"Before exchange with ctr2 the ctr1 is:\"; print(ctr1); //调用子程序,把ctr2打印出来 cout<cout<<\"After exchange with ctr2 the ctr1 is:\";

ctr1.swap(ctr2); //让ctr1的内容与ctr2交换 print(ctr1); //调用子程序,把ctr1打印出来 cout<运行结果:

bnc.wwwkookoote.ntenk. ww wbnc.oobnnk. et bnc.wwwkoote.nte.nwwwoobnc. tenk. bnc.wwww wkooncw.koobwwc.woobnenk. t※ 28 ※

ooenk. tw wcw.运行结果如图24所示。

o tenk. bnc.wwwkookoote.n

图24 程序运行结果

1.25 multiset::upper_bound

.coobnc.www功能:

求出指向第一个关键字的值是大于一个给定值的元素的定位器。 语法:

iterator upper_bound( const Key& _Key );

const_iterator upper_bound( const Key& _Key ) const; 说明:

_Key 是一个用于排序的关键字。 函数返回值:

返回一个指向第一个关键字的值是大于一个给定值的元素的定位器,或者返回指向multiset容器的结束的定位器。

示例:

/*************************************************** 程序编号:25

程序功能说明:先初始化一个multiset,再打印其中的内容,最后将关键字比2大的元素打印出来。

***************************************************/ #include

#include using namespace std;

int print(multiset c) //用于打印一个multiset {

multiset ::const_iterator cp;

for(cp=c.begin();cp!=c.end();cp++) //让cp从c的开始到结束打印cp对应的值 cout<<*cp<<\" \"; return 0; }

int main() {

multiset ctr; multiset ::const_iterator cp; int i;

for(i=0;i<=3;i++)ctr.insert(i);

tenk. ww wbnc.oobnnk. et bnc.wwwkoote.nwwwoobnc. tenk. bnc.wwww wkoote.nncw.koobwwc.woobnenk. t※ 29 ※

ooenk. tw wcw.o tenk..coobn //给ctr赋值 cout<<\"The ctr is: \"; print(ctr); //调用子程序来打印ctr的内容 cout<cp=ctr.upper_bound(2); if(cp!=ctr.end()) { cout<<\"The first element which key > 2 is: \"; cout<<*cp; //调用子程序来打印一项 cout<return 0; }

运行结果:

运行结果如图25所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.1.26 multiset::value_comp

c.www功能:

返回一个能确定元素的次序的函数。 语法:

value_compare value_comp() const; 说明:

它是根椐关键字的值key来确定元素的次序关系的。 函数返回值:

返回一个能确定元素的次序的函数。 示例:

/*************************************************** 程序编号:26

程序功能说明:先取得一个key_value函数,再用此函数来比较元素1和元素2。 ***************************************************/ #include

#include

using namespace std; int main() {

multiset ctr; multiset >::value_compare vc = ctr.value_comp() ; multiset :: iterator cp1,cp2,cp3;

oobnnk. et bnc.www

koo图25 程序运行结果

wwwoobnc. tenk. bnc.wwww wkooncw.koobwwc.woobnenk. t※ 30 ※

ooenk. tw wcw.o tenk..coobn

pair< multiset::iterator, bool > cpr1, cpr2; int i;

for(i=0;i<3;i++) //给ctr赋值 ctr.insert(i); cpr1.first=ctr.begin(); cpr2.first=ctr.begin(); cpr2.first++;

if(vc(*cpr1.first,*cpr2.first)) cout<<\"element 1 is precedes element 2\"<运行结果:

运行结果如图26所示。

bnc.wwwkookoote.nte.nte.ntenk. ww wbnc.c.wwwoobnnk. et bnc.www

koo图26 程序运行结果

wwwoobnc. tenk. bnc.wwww wkooncw.koobwwc.woobnenk. t※ 31 ※

ooenk. tw wcw.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务