STL-18 Multiset in C++ Standard Template Library (STL)

Multiset in C++ Standard Template Library (STL)

Multisets are a type of associative containers similar to set, with an exception that multiple elements can have same values.
Some Basic Functions associated with multiset:

  • begin() – Returns an iterator to the first element in the multiset

  • end() – Returns an iterator to the theoretical element that follows last element in the multiset

  • size()– Returns the number of elements in the multiset

  • max_size() – Returns the maximum number of elements that the multiset can hold

  • empty() – Returns whether the multiset is empty

Implementation:

#include <iostream>
#include <set>
#include <iterator>

using namespace std;

int main() {
	// empty multiset container
	multiset <int, greater <int> > gquiz1;		

	// insert elements in random order
	gquiz1.insert(40);
	gquiz1.insert(30);
	gquiz1.insert(60);
	gquiz1.insert(20);
	gquiz1.insert(50);
	
	// 50 will be added again to
	// the multiset unlike set
	gquiz1.insert(50);
	gquiz1.insert(10);

	// printing multiset gquiz1
	multiset <int, greater <int> > :: iterator itr;
	cout << "\nThe multiset gquiz1 is : \n";
	for (itr = gquiz1.begin(); itr!= gquiz1.end(); ++itr) {
		cout << *itr << " ";
	}
	cout << endl;

	// assigning the elements from gquiz1 to gquiz2
	multiset <int> gquiz2(gquiz1.begin(), gquiz1.end());

	// print all elements of the multiset gquiz2
	cout << "\nThe multiset gquiz2 \n"
			"after assign from gquiz1 is : \n";
	for (itr = gquiz2.begin(); itr
		!= gquiz2.end(); ++itr)
	{
		cout << *itr <<" ";
	}
	cout << endl;

	// remove all elements up to element with value 30 in gquiz2
	cout << "\ngquiz2 after removal \n"
			"of elements less than 30 : \n";
	gquiz2.erase(gquiz2.begin()
				, gquiz2.find(30));
	for (itr = gquiz2.begin(); itr!= gquiz2.end(); ++itr) {
		cout << *itr << " " ;
	}

	// remove all elements with value 50 in gquiz2
	int num;
	num = gquiz2.erase(50);
	cout << "\ngquiz2.erase(50) : \n";
	cout << num << " removed \n" ;
	for (itr = gquiz2.begin(); itr!= gquiz2.end(); ++itr) {
		cout << *itr << " ";
	}

	cout << endl;

	//lower bound and upper bound for multiset gquiz1
	cout << "\ngquiz1.lower_bound(40) : \n"
		<< *gquiz1.lower_bound(40) << endl;
	cout << "gquiz1.upper_bound(40) : \n"
		<< *gquiz1.upper_bound(40) << endl;

	//lower bound and upper bound for multiset gquiz2
	cout << "gquiz2.lower_bound(40) : \n"
		<< *gquiz2.lower_bound(40) << endl;
	cout << "gquiz2.upper_bound(40) : \n"
		<< *gquiz2.upper_bound(40) << endl;
		
		return 0;

}

Output

The multiset gquiz1 is : 
60 50 50 40 30 20 10 

The multiset gquiz2 
after assign from gquiz1 is : 
10 20 30 40 50 50 60 

gquiz2 after removal 
of elements less than 30 : 
30 40 50 50 60 
gquiz2.erase(50) : 
2 removed 
30 40 60 

gquiz1.lower_bound(40) : 
40
gquiz1.upper_bound(40) : 
30
gquiz2.lower_bound(40) : 
40
gquiz2.upper_bound(40) : 
60
Removing Element from multiset which have same value
  • a.erase() – Remove all instance of element from multiset having same value
  • a.erase(a.find()) – Remove only one instance of element from multiset having same value
#include <bits/stdc++.h>
using namespace std;

int main() {
	multiset<int> a;
	a.insert(10);
	a.insert(10);
	a.insert(10);

	// it will give output 3
	cout << a.count(10) << endl;

	// removing single instance from multiset
	
	// it will remove only one value of 10 from multiset
	a.erase(a.find(10));
	
	// it will give output 2
	cout << a.count(10) << endl;

	// removing all instance of element from multiset it will remove all instance of value 10
	a.erase(10);
	
	// it will give output 0 because all instance of value is removed from mulitset
	cout << a.count(10)
		<< endl;

	return 0;
}

Output

3
2
0

List of functions of Multiset:

  • begin() – Returns an iterator to the first element in the multiset.
  • end() – Returns an iterator to the theoretical element that follows last element in the multiset.
  • size() – Returns the number of elements in the multiset.
  • max_size() – Returns the maximum number of elements that the multiset can hold.
  • empty() – Returns whether the multiset is empty.
  • pair insert(const g) – Adds a new element ‘g’ to the multiset.
  • iterator insert (iterator position,const g) – Adds a new element ‘g’ at the position pointed by iterator.
  • erase(iterator position) – Removes the element at the position pointed by the iterator.
  • erase(const g) – Removes the value ‘g’ from the multiset.
  • clear() – Removes all the elements from the multiset.
  • key_comp() / value_comp() – Returns the object that determines how the elements in the multiset are ordered (‘<‘ by default).
  • find(const g) – Returns an iterator to the element ‘g’ in the multiset if found, else returns the iterator to end.
  • count(const g) – Returns the number of matches to element ‘g’ in the multiset.
  • lower_bound(const g) – Returns an iterator to the first element that is equivalent to ‘g’ or definitely will not go before the element ‘g’ in the multiset.
  • upper_bound(const g) – Returns an iterator to the first element that is equivalent to ‘g’ or definitely will go after the element ‘g’ in the multiset.
  • multiset::swap() – This function is used to exchange the contents of two multisets but the sets must be of same type, although sizes may differ.
  • multiset::operator= – This operator is used to assign new contents to the container by replacing the existing contents.
  • multiset::emplace() – This function is used to insert a new element into the multiset container.
  • multiset equal_range() – Returns an iterator of pairs. The pair refers to the range that includes all the elements in the container which have a key equivalent to k.
  • multiset::emplace_hint() – Inserts a new element in the multiset.
  • multiset::rbegin() – Returns a reverse iterator pointing to the last element in the multiset container.
  • multiset::rend() – Returns a reverse iterator pointing to the theoretical element right before the first element in the multiset container.
  • multiset::cbegin() – Returns a constant iterator pointing to the first element in the container.
  • multiset::cend() – Returns a constant iterator pointing to the position past the last element in the container.
  • multiset::crbegin() – Returns a constant reverse iterator pointing to the last element in the container.
  • multiset::crend() – Returns a constant reverse iterator pointing to the position just before the first element in the container.
  • multiset::get_allocator() – Returns a copy of the allocator object associated with the multiset.

For more detailed usage of the methods above, turn to Google or Baidu for help.

More about c++ STL, turn to this page.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值