当前位置:  编程语言>c/c++

C++ STL MultiSet类成员函数介绍及具体用法示例

 
    发布时间:2014-4-18  


    本文导语:  C++ STL MultiSet类成员函数介绍及具体用法示例1、C++ STL MultiSet 简介 C++ STL MultiSet跟set具有相同功能,但允许重复的元素。multiset容器的内部结构通常由平衡二叉树(balanced binary tree)来实现。当元素放入容器中时,会按照一...

c++ stl multiset成员函数介绍及具体用法示例

1、C++ STL MultiSet 简介

    C++ STL MultiSetset具有相同功能,但允许重复的元素。multiset容器的内部结构通常由平衡二叉树(balanced binary tree)来实现。当元素放入容

器中时,会按照一定的排序法则自动排序,默认是按照less<>排序规则来排序。这种自动排序的特性加速了元 素查找的过程,但是也带来了一个问题:不可以

直接修改set或multiset容器中的元素值,因为这样做就可能违反了元素自动排序的规则。如果你希望修 改一个元素的值,必须先删除原有的元素,再插入新

的元素。

   C++ STL MultiSet类成员函数列表如下:

begin()

返回指向第一个元素的迭代器

clear()

清除所有元素

count()

返回指向某个值元素的个数

empty()

如果集合为空,返回true

end()

返回指向最后一个元素的迭代器

equal_range()

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

erase()

删除集合中的元素

find()

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

get_allocator()

返回多元集合的分配器

insert()

在集合中插入元素

key_comp()

返回一个用于元素间值比较的函数

lower_bound()

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

max_size()

返回集合能容纳的元素的最大限值

rbegin()

返回指向多元集合中最后一个元素的反向迭代器

rend()

返回指向多元集合中第一个元素的反向迭代器

size()

多元集合中元素的数目

swap()

交换两个多元集合变量

upper_bound()

返回一个大于某个值元素的迭代器

value_comp()

返回一个用于比较元素间的值的函数


2、C++ STL MultiSet 成员函数

2.1 C++ STL MultiSet 构造函数

multiset( );
explicit multiset (
   const Compare& _Comp
);
multiset (
   const Compare& _Comp,
   const Allocator& _Al
);
set(
   const multiset<Key, Compare, Allocator> & _Right
);
template<class InputIterator>
   multiset (
      InputIterator _First,
      InputIterator _Last
   );
template<class InputIterator>
   multiset (
      InputIterator _First,
      InputIterator _Last,
      const Compare& _Comp
   );
template<class InputIterator>
   multiset (
      InputIterator _First,
      InputIterator _Last,
      const Compare& _Comp,
      const Allocator& _Al
   );

参数

_Al

        The storage allocator class to be used for this set object, which defaults to Allocator.

_Comp

        The comparison function of type constTraits used to order the elements in the set, which defaults to Compare.

_Right

        The set of which the constructed set is to be a copy.

_First

        The position of the first element in the range of elements to be copied.

_Last

        The position of the first element beyond the range of elements to be copied.


2.2 C++ STL MultiSet迭代函数

const_iterator begin( ) const;

iterator begin( );

功能:返回指向multiset头部的迭代器.


const_iterator end( ) const;

iterator end( );

功能: 返回指向multiset尾部的迭代器


const_reverse_iterator rbegin( ) const;

reverse_iterator rbegin( );

功能: 返回一个指向multiset尾部的逆向迭代器


const_reverse_iterator rend( ) const;

reverse_iterator rend( );

功能:       返回一个指向multiset首尾部的逆向迭代器


2.3.2  C++ STL MultiSet 删除数据

iterator erase(

  iterator _Where

);


iterator erase(

  iterator _First,

  iterator _Last

);


size_type erase(

  const key_type& _Key

);

参数:

_Where

    Position of the element to be removed from the set.

_First

    Position of the first element removed from the set.

_Last

    Position just beyond the last element removed from the set.

_Key

    The key of the elements to be removed from the set.


2.3.3  C++ STL MultiSet交换数据

void swap(

  set<Key, Traits, Allocator>& _Right

);

参数:

_Right

   The argument set providing the elements to be swapped with the target set.


2.3.4 C++ STL MultiSet 清空数据

void clear( );


2.3 C++ STL MultiSet 操作函数

const_iterator lower_bound(

  const Key& _Key

) const;

iterator lower_bound(

  const Key& _Key

);

功能:

       返回容器中第一个值大于或等于_Key的元素的iterator位置。

参数:

        const Key& _Key, The argument key to be compared with the sort key of an element from the multiset being searched.


const_iterator upper_bound(

  const Key& _Key

) const;

iterator upper_bound(

  const Key& _Key

);

功能:

       返回容器中第一个值大于_Key的元素的iterator位置。

参数:

        const Key& _Key, The argument key to be compared with the sort key of an element from the multiset being searched.


pair <const_iterator, const_iterator>

  equal_range (

     const Key& _Key

  ) const;

pair <iterator, iterator>

  equal_range (

     const Key& _Key

  );

功能:

     返回容器中值等于val的所有元素的范围[beg, end)组成的pair<beg, end> 。即A pair of iterators such that the first is the lower_bound of


the key and the second is the upper_bound of the key.

参数:

_Key

     The argument key to be compared with the sort key of an element from the multiset being searched.


3、C++ STL MultiSet代码范例

#include <iostream>
#include <set>
using namespace std;
void PRINT_ELEMENTS(multiset<int> col1, const char* cstr)
{
    multiset<int>::const_iterator pos;
    cout << cstr << endl;
    for (pos = col1.begin(); pos != col1.end(); ++pos)
    {
        cout << *pos << " ";
    }
}
int main()
{
    multiset<int> col1;
    col1.insert(2);
    col1.insert(5);
    col1.insert(4);
    col1.insert(6);
    col1.insert(1);
    col1.insert(5);
    PRINT_ELEMENTS(col1, "col1: ");
    cout << endl;
    multiset<int>::const_iterator pos;
    pair<multiset<int>::iterator, multiset<int>::iterator> range;
    cout << "lower_bound(3): " << *col1.lower_bound(3) << endl;
    cout << "upper_bound(3): " << *col1.upper_bound(3) << endl;
    range = col1.equal_range(3);
    cout << "equal_range(3): " << *range.first << " " << *range.second << endl;
    cout << "elements with value(3): ";
    for (pos = range.first; pos != range.second; ++pos)
    {
        cout << *pos << " ";
    }
    cout << endl;
    cout << endl;
    cout << "lower_bound(5): " << *col1.lower_bound(5) << endl;
    cout << "upper_bound(5): " << *col1.upper_bound(5) << endl;
    range = col1.equal_range(5);
    cout << "equal_range(5): " << *range.first << " " << *range.second << endl;
    cout << "elements with value(5): ";
    for (pos = range.first; pos != range.second; ++pos)
    {
        cout << *pos << " ";
    }
    cout << endl;
}


输出

col1:

1 2 4 5 5 6

lower_bound(3): 4

upper_bound(3): 4

equal_range(3): 4 4

elements with value(3):


lower_bound(5): 5

upper_bound(5): 6

equal_range(5): 5 6

elements with value(5): 5 5


  • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
    转载请注明:文章转载自:[169IT-IT技术资讯]
    本文标题:C++ STL MultiSet类成员函数介绍及具体用法示例
相关文章推荐:


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3