C++ 標準庫 std::set std::multiset初始化、插入元素insert()的使用
技術標籤:# 4.1 C++c++stlsetmutisetinsert
文章目錄
std::set::insert
函式原型:
single element (1) pair<iterator,bool> insert (const value_type& val);
pair<iterator,bool> insert (value_type&& val);
with hint (2) iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
range (3) template <class InputIterator>
void insert (InputIterator first, InputIterator last);
initializer list (4) void insert (initializer_list<value_type> il);
插入元素
通過插入新元素來擴充套件容器,從而通過插入的元素數量有效地增加容器的大小。
因為集合中的元素是唯一的,所以插入操作將檢查每個插入的元素是否等效於容器中已經存在的元素,如果是,則不插入該元素,並向該現有元素返回迭代器(如果該函式返回一個值 )。
有關允許重複元素的類似容器,請參見多集。
在內部,集合容器使所有元素按照其比較物件指定的條件進行排序。 始終按照此順序將元素插入其各自的位置。
引數確定要插入多少個元素以及將它們初始化為哪些值:
引數:
val:
要複製(或移動)到插入元素的值。
成員型別value_type是容器中元素的型別,在set中定義為其第一個模板引數(T)的別名。
position:
請注意,這只是一個提示,並不強制將新元素插入到set容器內的該位置(集合中的元素始終遵循特定順序)。
成員型別iterator和const_iterator在map中定義為指向元素的雙向迭代器型別。
first,last:
指定元素範圍的迭代器。 範圍為[first,last)的元素副本插入到容器中。
請注意,範圍包括first和last之間的所有元素,包括first指向的元素,但last指向的元素則不包括。
函式模板引數InputIterator應該是一個輸入迭代器型別,該型別指向可以從其構造value_type物件的型別的元素。
il:
一個initializer_list物件。 插入這些元素的副本。
這些物件是根據初始值設定項列表宣告符自動構造的。
成員型別value_type是容器中元素的型別,在set中定義為其第一個模板引數(T)的別名。
返回值:
單個元素版本(1)返回一個對,其成員pair :: first設定為一個迭代器,該迭代器指向新插入的元素或集合中已經存在的等效元素。 如果插入了新元素,則對中的pair :: second元素設定為true,如果已經存在等效元素,則設定為false。
帶有提示(2)的版本將返回一個迭代器,該迭代器指向新插入的元素或集合中已經具有相同值的元素。
成員型別迭代器是指向元素的雙向迭代器型別。
對是在中宣告的類模板(請參見對)。
std::multiset::insert
函式原型:
single element (1) iterator insert (const value_type& val);
iterator insert (value_type&& val);
with hint (2) iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, value_type&& val);
range (3) template <class InputIterator>
void insert (InputIterator first, InputIterator last);
initializer list (4) void insert (initializer_list<value_type> il);
插入元素
通過插入新元素來擴充套件容器,從而通過插入的元素數量有效地增加容器的大小。
在內部,多集容器按照其比較物件所指定的標準對所有元素進行排序。 始終按照此順序將元素插入其各自的位置。
引數:
val:
要複製(或移動)到插入元素的值。
成員型別value_type是容器中元素的型別,在多集中定義為其第一個模板引數(T)的別名。
position:
請注意,這只是一個提示,並不強制將新元素插入多集容器內的該位置(多集中的元素始終遵循特定順序)。
成員型別iterator和const_iterator在map中定義為指向元素的雙向迭代器型別。
first,last:
指定元素範圍的迭代器。 範圍為[first,last)的元素副本插入到容器中。
請注意,範圍包括first和last之間的所有元素,包括first指向的元素,但last指向的元素則不包括。
函式模板引數InputIterator應該是一個輸入迭代器型別,該型別指向可以從其構造value_type物件的型別的元素。
il:
一個initializer_list物件。 插入這些元素的副本。
這些物件是根據初始值設定項列表宣告符自動構造的。
成員型別value_type是容器中元素的型別,在多集中定義為其第一個模板引數(T)的別名。
返回值:
在返回值的版本中,這是一個指向多集中新插入元素的迭代器。
成員型別迭代器是指向元素的雙向迭代器型別。
#include <iostream>
#include <set>
using namespace std;
void OutPut(set<int> &s)
{
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<" "<<*it<<", ";
cout<<endl;
}
void OutPutM(multiset<int> &s)
{
multiset<int>::iterator it;
for(it=s.begin();it!=s.end();it++)
cout<<" "<<*it<<", ";
cout<<endl;
}
void main()
{
set<int>s1;
s1.insert(10);
s1.insert(15);
s1.insert(25);
s1.insert(20);
s1.insert(30);
s1.insert(33);
s1.insert(5);
s1.insert(20);
OutPut(s1);
multiset<int>sm1;
sm1.insert(10);
sm1.insert(15);
sm1.insert(25);
sm1.insert(20);
sm1.insert(30);
sm1.insert(33);
sm1.insert(5);
sm1.insert(20);
OutPutM(sm1);
}