set與multiset 都是C++ 中的集合類,不同的是set中不允許存在重複元素,而multiset允許存在重複元素。
cplusplus網站列出了兩個類的成員函數:
begin
返回容器首元素指針 (public 成員函數 )
end
返回容器尾元素指針 (public 成員函數)
rbegin
返回容器反向迭代首元素指針(public 成員函數 )
rend
返回容器反向迭代尾元素指針 (public 成員函數 )
cbegin
返回 const_iterator迭代首元素指針 (public 成員函數 )( const_iterator指向的元素不可改變)
cend
返回const_iterator迭代尾元素指針 (public 成員函數 )
crbegin
返回const_reverse_iterator 反向迭代首元素指針 (public 成員函數 )
crend
返回const_reverse_iterator反向迭代尾元素指針 (public 成員函數 )
empty
檢測容器是否爲空 (public 成員函數 )
size
返回容器長度 (public 成員函數 )
max_size
返回最大長度 (public 成員函數 )
修改:
insert
插入元素 (public 成員函數 )
erase
清除元素 (public 成員函數 )
swap
交換集合元素 (public 成員函數 )
clear
清除集合元素 (public 成員函數 )
emplace
構建容器並插入某個元素 (public 成員函數 )
emplace_hint
構建容器並插入指定元素 (public成員函數 )
觀測:
key_comp
返回比較結果 (public member function )
value_comp
返回比較結果 (public member function )
操作:
find
查找容器中元素(public member function )
count
根據查找關鍵字查找元素下標 (public member function )
lower_bound
返回容器某個元素低界(public member function )
upper_bound
返回容器某個元素上界(public member function )
equal_range
返回容器中相同元素的範圍 (public member function )
實例代碼如下:
#include <iostream>
#include <set>
int main ()
{
std::multiset<int> mymultiset;
for (int i=0; i<5; i++) mymultiset.insert(i);
std::multiset<int>::key_compare mycomp = mymultiset.key_comp();
std::cout << "mymultiset contains:";
int highest = *mymultiset.rbegin();
std::multiset<int>::iterator it = mymultiset.begin();
do {
std::cout << ' ' << *it;
} while ( mycomp(*it++,highest) );
std::cout << '\n';
return 0;
}
輸出:
mymultiset contains: 0 1 2 3 4
類成員函數可以直接調用。
需要注意的是begin()和end()函數
begin()函數返回的是容器的第一個元素,end()返回的容器中元素的個數,即容器的尾部是容器內有效元素的個數,不知道這樣理解對不對,代碼展示如下:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
std::multiset<int> myset;
std::multiset<int>::iterator itlow,itup;
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
cout<<"begin()"<<*myset.begin()<<" end() "<<*myset.end()<<endl;
std::cout << "myset contains:";
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
輸出如下:
另外一個注意的是lower_bound(element)是容器中大於等於element的元素迭代器指針,upper_bound(element)是容器中大於element的元素迭代器指針。
代碼展示如下:
#include <iostream>
#include <set>
using namespace std;
int main ()
{
std::multiset<int> myset;
std::multiset<int>::iterator itlow,itup;
for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
itlow=myset.lower_bound (30); // ^
itup=myset.upper_bound (40); // ^
cout<<*itlow<<" "<<*itup<<endl;
//cout<<"begin()"<<*myset.begin()<<" end() "<<*myset.end()<<endl;
std::cout << "myset contains:";
for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
輸出:
附cplusplus網址:http://www.cplusplus.com/reference/set/multiset/